Перейти к содержимому

Как найти элемент в массиве php

  • автор:

array_search

Замечание:

Если искомое значение needle — строка, функция сравнивает значения с учётом регистра.

Функция array_search() будет искать идентичные элементы в массиве haystack , если третьему параметру strict установили значение true . То есть функция также будет выполнять строгое сравнение типа значения needle в массиве haystack , а индекс объекта функция найдёт, если объект окажется тем же экземпляром.

Возвращаемые значения

Возвращает ключ значения needle , если функция нашла значение в массиве, иначе false .

Функция вернёт первый найденный ключ, если в массиве haystack значение needle встречается больше одного раза. Чтобы вернуть ключи всех найденных значений, вызывают функцию array_keys() с необязательным параметром filter_value .

Внимание

Функция возвращает как логическое значение false , так и нелогическое значение, которое приводится к false . Прочитайте раздел «Логический тип», чтобы получить дополнительную информацию. Используйте оператор === для проверки значения, которое возвращает функция.

Примеры

Пример #1 Пример использования функции array_search()

$array = array( 0 => ‘blue’ , 1 => ‘red’ , 2 => ‘green’ , 3 => ‘red’ );

$key = array_search ( ‘green’ , $array ); // $key = 2;
$key = array_search ( ‘red’ , $array ); // $key = 1;

Смотрите также

  • array_keys() — Возвращает все или некоторое подмножество ключей массива
  • array_values() — Возвращает все значения массива
  • array_key_exists() — Проверяет, существует ли в массиве заданный ключ или индекс
  • in_array() — Проверяет, присутствует ли в массиве значение

Improve This Page

User Contributed Notes 16 notes

7 years ago

About searcing in multi-dimentional arrays; two notes on «xfoxawy at gmail dot com»;

It perfectly searches through multi-dimentional arrays combined with array_column() (min php 5.5.0) but it may not return the values you’d expect.

Since array_column() will produce a resulting array; it won’t preserve your multi-dimentional array’s keys. So if you check against your keys, it will fail.

$people = array(
2 => array(
‘name’ => ‘John’ ,
‘fav_color’ => ‘green’
),
5 => array(
‘name’ => ‘Samuel’ ,
‘fav_color’ => ‘blue’
)
);

$found_key = array_search ( ‘blue’ , array_column ( $people , ‘fav_color’ ));
?>

Here, you could expect that the $found_key would be «5» but it’s NOT. It will be 1. Since it’s the second element of the produced array by the array_column() function.

Secondly, if your array is big, I would recommend you to first assign a new variable so that it wouldn’t call array_column() for each element it searches. For a better performance, you could do;

$colors = array_column ( $people , ‘fav_color’ );
$found_key = array_search ( ‘blue’ , $colors );
?>

21 years ago

If you are using the result of array_search in a condition statement, make sure you use the === operator instead of == to test whether or not it found a match. Otherwise, searching through an array with numeric indicies will result in index 0 always getting evaluated as false/null. This nuance cost me a lot of time and sanity, so I hope this helps someone. In case you don’t know what I’m talking about, here’s an example:

$code = array( «a» , «b» , «a» , «c» , «a» , «b» , «b» ); // infamous abacabb mortal kombat code 😛

// this is WRONG
while (( $key = array_search ( «a» , $code )) != NULL )
<
// infinite loop, regardless of the unset
unset( $code [ $key ]);
>

// this is _RIGHT_
while (( $key = array_search ( «a» , $code )) !== NULL )
<
// loop will terminate
unset( $code [ $key ]);
>
?>

6 years ago

Despite PHP’s amazing assortment of array functions and juggling maneuvers, I found myself needing a way to get the FULL array key mapping to a specific value. This function does that, and returns an array of the appropriate keys to get to said (first) value occurrence.

function array_recursive_search_key_map($needle, $haystack) foreach($haystack as $first_level_key=>$value) if ($needle === $value) return array($first_level_key);
> elseif (is_array($value)) $callback = array_recursive_search_key_map($needle, $value);
if ($callback) return array_merge(array($first_level_key), $callback);
>
>
>
return false;
>

$nested_array = $sample_array = array(
‘a’ => array(
‘one’ => array (‘aaa’ => ‘apple’, ‘bbb’ => ‘berry’, ‘ccc’ => ‘cantalope’),
‘two’ => array (‘ddd’ => ‘dog’, ‘eee’ => ‘elephant’, ‘fff’ => ‘fox’)
),
‘b’ => array(
‘three’ => array (‘ggg’ => ‘glad’, ‘hhh’ => ‘happy’, ‘iii’ => ‘insane’),
‘four’ => array (‘jjj’ => ‘jim’, ‘kkk’ => ‘kim’, ‘lll’ => ‘liam’)
),
‘c’ => array(
‘five’ => array (‘mmm’ => ‘mow’, ‘nnn’ => ‘no’, ‘ooo’ => ‘ohh’),
‘six’ => array (‘ppp’ => ‘pidgeon’, ‘qqq’ => ‘quail’, ‘rrr’ => ‘rooster’)
)
);

$array_keymap = array_recursive_search_key_map($search_value, $nested_array);

But again, with the above solution, PHP again falls short on how to dynamically access a specific element’s value within the nested array. For that, I wrote a 2nd function to pull the value that was mapped above.

function array_get_nested_value($keymap, $array)
$nest_depth = sizeof($keymap);
$value = $array;
for ($i = 0; $i < $nest_depth; $i++) $value = $value[$keymap[$i]];
>

usage example:
——————-
echo array_get_nested_value($array_keymap, $nested_array); // insane

PHP — Проверить наличие элемента в массиве

Мне нужно проверить есть ли в массиве элемент(предположим 1.0.136.30). Если есть — действие1, если нет — действие2. Этот код не срабатывает:

$lines = file('./database.txt'); $ip = "1.0.136.30"; if(in_array($ip, $lines))< // действие 1 print_r("действие 1"); >else < // действие 2 print_r("действие 2"); >

Всегда происходит действие2, вне зависимости есть эелемент в массиве или нет

Отслеживать

Екатерина Корчагина

задан 27 апр 2022 в 14:07

Екатерина Корчагина Екатерина Корчагина

259 2 2 серебряных знака 10 10 бронзовых знаков

а что у тебя в lines на самом деле? код рабочий sandbox.onlinephpfunctions.com/c/b3382

Commented 27 апр 2022 в 14:26

Возможный дубликат вопроса: Как и какими средствами находить ошибки в PHP коде?

Commented 27 апр 2022 в 14:27

А в массиве очевидно элементы с переносами строк в конце.

Commented 27 апр 2022 в 14:32

Код не рабочий! print_r($lines); выдает это Array ( [0] => [1] => 1.0.136.30 [2] => 1.0.136.29)

Commented 27 апр 2022 в 14:33

значит не всё убираешь. наверное пробел остаётся в конце или ещё что-то. см. ru.stackoverflow.com/questions/1404366/#comment2496551_1404366

Commented 27 апр 2022 в 14:56

array_search

Замечание:

Если искомое значение needle — строка, функция сравнивает значения с учётом регистра.

Функция array_search() будет искать идентичные элементы в массиве haystack , если третьему параметру strict установили значение true . То есть функция также будет выполнять строгое сравнение типа значения needle в массиве haystack , а индекс объекта функция найдёт, если объект окажется тем же экземпляром.

Возвращаемые значения

Возвращает ключ значения needle , если функция нашла значение в массиве, иначе false .

Функция вернёт первый найденный ключ, если в массиве haystack значение needle встречается больше одного раза. Чтобы вернуть ключи всех найденных значений, вызывают функцию array_keys() с необязательным параметром filter_value .

Внимание

Функция возвращает как логическое значение false , так и нелогическое значение, которое приводится к false . Прочитайте раздел «Логический тип», чтобы получить дополнительную информацию. Используйте оператор === для проверки значения, которое возвращает функция.

Примеры

Пример #1 Пример использования функции array_search()

$array = array( 0 => ‘blue’ , 1 => ‘red’ , 2 => ‘green’ , 3 => ‘red’ );

$key = array_search ( ‘green’ , $array ); // $key = 2;
$key = array_search ( ‘red’ , $array ); // $key = 1;

Смотрите также

  • array_keys() — Возвращает все или некоторое подмножество ключей массива
  • array_values() — Возвращает все значения массива
  • array_key_exists() — Проверяет, существует ли в массиве заданный ключ или индекс
  • in_array() — Проверяет, присутствует ли в массиве значение

Improve This Page

User Contributed Notes 16 notes

7 years ago

About searcing in multi-dimentional arrays; two notes on «xfoxawy at gmail dot com»;

It perfectly searches through multi-dimentional arrays combined with array_column() (min php 5.5.0) but it may not return the values you’d expect.

Since array_column() will produce a resulting array; it won’t preserve your multi-dimentional array’s keys. So if you check against your keys, it will fail.

$people = array(
2 => array(
‘name’ => ‘John’ ,
‘fav_color’ => ‘green’
),
5 => array(
‘name’ => ‘Samuel’ ,
‘fav_color’ => ‘blue’
)
);

$found_key = array_search ( ‘blue’ , array_column ( $people , ‘fav_color’ ));
?>

Here, you could expect that the $found_key would be «5» but it’s NOT. It will be 1. Since it’s the second element of the produced array by the array_column() function.

Secondly, if your array is big, I would recommend you to first assign a new variable so that it wouldn’t call array_column() for each element it searches. For a better performance, you could do;

$colors = array_column ( $people , ‘fav_color’ );
$found_key = array_search ( ‘blue’ , $colors );
?>

21 years ago

If you are using the result of array_search in a condition statement, make sure you use the === operator instead of == to test whether or not it found a match. Otherwise, searching through an array with numeric indicies will result in index 0 always getting evaluated as false/null. This nuance cost me a lot of time and sanity, so I hope this helps someone. In case you don’t know what I’m talking about, here’s an example:

$code = array( «a» , «b» , «a» , «c» , «a» , «b» , «b» ); // infamous abacabb mortal kombat code 😛

// this is WRONG
while (( $key = array_search ( «a» , $code )) != NULL )
<
// infinite loop, regardless of the unset
unset( $code [ $key ]);
>

// this is _RIGHT_
while (( $key = array_search ( «a» , $code )) !== NULL )
<
// loop will terminate
unset( $code [ $key ]);
>
?>

6 years ago

Despite PHP’s amazing assortment of array functions and juggling maneuvers, I found myself needing a way to get the FULL array key mapping to a specific value. This function does that, and returns an array of the appropriate keys to get to said (first) value occurrence.

function array_recursive_search_key_map($needle, $haystack) foreach($haystack as $first_level_key=>$value) if ($needle === $value) return array($first_level_key);
> elseif (is_array($value)) $callback = array_recursive_search_key_map($needle, $value);
if ($callback) return array_merge(array($first_level_key), $callback);
>
>
>
return false;
>

$nested_array = $sample_array = array(
‘a’ => array(
‘one’ => array (‘aaa’ => ‘apple’, ‘bbb’ => ‘berry’, ‘ccc’ => ‘cantalope’),
‘two’ => array (‘ddd’ => ‘dog’, ‘eee’ => ‘elephant’, ‘fff’ => ‘fox’)
),
‘b’ => array(
‘three’ => array (‘ggg’ => ‘glad’, ‘hhh’ => ‘happy’, ‘iii’ => ‘insane’),
‘four’ => array (‘jjj’ => ‘jim’, ‘kkk’ => ‘kim’, ‘lll’ => ‘liam’)
),
‘c’ => array(
‘five’ => array (‘mmm’ => ‘mow’, ‘nnn’ => ‘no’, ‘ooo’ => ‘ohh’),
‘six’ => array (‘ppp’ => ‘pidgeon’, ‘qqq’ => ‘quail’, ‘rrr’ => ‘rooster’)
)
);

$array_keymap = array_recursive_search_key_map($search_value, $nested_array);

But again, with the above solution, PHP again falls short on how to dynamically access a specific element’s value within the nested array. For that, I wrote a 2nd function to pull the value that was mapped above.

function array_get_nested_value($keymap, $array)
$nest_depth = sizeof($keymap);
$value = $array;
for ($i = 0; $i < $nest_depth; $i++) $value = $value[$keymap[$i]];
>

usage example:
——————-
echo array_get_nested_value($array_keymap, $nested_array); // insane

Как сделать поиск в php массиве по значению

Можно использовать встроенную функцию array_search() , она возвращает ключ найденного элемента. Затем мы можем получить и сам элемент по этому ключу.

 $numbers = [1, 2, 'salad', 'potato']; $potatoIndex = array_search('potato', $numbers); // 3 print_r($numbers[$potatoIndex]); //=> potato 

08 ноября 2022

Поиск значения с помощью цикла foreach() .

 $value)

Если значение подразумевает не полное соответствие, а частичное, то применяют обычно цикл с проверкой на вхождение искомого значения в значениях массива:

 $array = [ 'key1' => 'value1', 'key2' => 'value2', 'key3' => 'value3', 'key4' => 'value4', 'key5' => 'value5', ]; $result = ''; foreach ($array as $value)  if (str_contains($value, '5'))  $result = $value; > > echo($result); // => value5 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *