in_array
Searches for needle in haystack using loose comparison unless strict is set.
Parameters
Note:
If needle is a string, the comparison is done in a case-sensitive manner.
If the third parameter strict is set to true then the in_array() function will also check the types of the needle in the haystack .
Note:
Prior to PHP 8.0.0, a string needle will match an array value of 0 in non-strict mode, and vice versa. That may lead to undesireable results. Similar edge cases exist for other types, as well. If not absolutely certain of the types of values involved, always use the strict flag to avoid unexpected behavior.
Return Values
Returns true if needle is found in the array, false otherwise.
Examples
Example #1 in_array() example
$os = array( «Mac» , «NT» , «Irix» , «Linux» );
if ( in_array ( «Irix» , $os )) echo «Got Irix» ;
>
if ( in_array ( «mac» , $os )) echo «Got mac» ;
>
?>?php
The second condition fails because in_array() is case-sensitive, so the program above will display:
Example #2 in_array() with strict example
if ( in_array ( ‘12.4’ , $a , true )) echo «‘12.4’ found with strict check\n» ;
>
if ( in_array ( 1.13 , $a , true )) echo «1.13 found with strict check\n» ;
>
?>
The above example will output:
1.13 found with strict check
Example #3 in_array() with an array as needle
if ( in_array (array( ‘p’ , ‘h’ ), $a )) echo «‘ph’ was found\n» ;
>
if ( in_array (array( ‘f’ , ‘i’ ), $a )) echo «‘fi’ was found\n» ;
>
if ( in_array ( ‘o’ , $a )) echo «‘o’ was found\n» ;
>
?>
The above example will output:
See Also
- array_search() — Searches the array for a given value and returns the first corresponding key if successful
- isset() — Determine if a variable is declared and is different than null
- array_key_exists() — Checks if the given key or index exists in the array
User Contributed Notes 8 notes
Loose checking returns some crazy, counter-intuitive results when used with certain arrays. It is completely correct behaviour, due to PHP’s leniency on variable types, but in «real-life» is almost useless.
The solution is to use the strict checking option.
$array = array(
‘egg’ => true ,
‘cheese’ => false ,
‘hair’ => 765 ,
‘goblins’ => null ,
‘ogres’ => ‘no ogres allowed in this array’
);
// Loose checking — return values are in comments
// First three make sense, last four do not
in_array ( null , $array ); // true
in_array ( false , $array ); // true
in_array ( 765 , $array ); // true
in_array ( 763 , $array ); // true
in_array ( ‘egg’ , $array ); // true
in_array ( ‘hhh’ , $array ); // true
in_array (array(), $array ); // true
in_array ( null , $array , true ); // true
in_array ( false , $array , true ); // true
in_array ( 765 , $array , true ); // true
in_array ( 763 , $array , true ); // false
in_array ( ‘egg’ , $array , true ); // false
in_array ( ‘hhh’ , $array , true ); // false
in_array (array(), $array , true ); // false
I got an unexpected behavior working with in_array. I’m using following code:
// .
$someId = getSomeId (); // it gets generated/fetched by another service, so I don’t know what value it will have. P.S.: it’s an integer
// The actual data in my edge-case scenario:
// $someId = 0;
// $anyArray = [‘dataOne’, ‘dataTwo’];
if ( in_array ( $someId , $anyArray )) // do some work
>
// .
?>
With PHP7.4, in_array returns boolean true.
With PHP8.1, in_array returns boolean false.
It took me quite some time to find out what’s going on.
I found out that in_array will *not* find an associative array within a haystack of associative arrays in strict mode if the keys were not generated in the *same order*:
$needle = array(
‘fruit’ => ‘banana’ , ‘vegetable’ => ‘carrot’
);
$haystack = array(
array( ‘vegetable’ => ‘carrot’ , ‘fruit’ => ‘banana’ ),
array( ‘fruit’ => ‘apple’ , ‘vegetable’ => ‘celery’ )
);
echo in_array ( $needle , $haystack , true ) ? ‘true’ : ‘false’ ;
// Output is ‘false’
echo in_array ( $needle , $haystack ) ? ‘true’ : ‘false’ ;
// Output is ‘true’
?>
I had wrongly assumed the order of the items in an associative array were irrelevant, regardless of whether ‘strict’ is TRUE or FALSE: The order is irrelevant *only* if not in strict mode.
I’d like to point out that, if you’re using Enum data structures and want to compare whether an array of strings has a certain string Enum in it, you need to cast it to a string.
From what I’ve tested, the function works correctly:
if the array is filled with strings and you’re searching for a string;
if the array is filled with Enums and you’re searching for an Enum.
Here is a recursive in_array function:
$myNumbers = [
[ 1 , 2 , 3 , 4 , 5 ],
[ 6 , 7 , 8 , 9 , 10 ],
];
$array = [
‘numbers’ => $myNumbers
];
// Let’s try to find number 7 within $array
$hasNumber = in_array ( 7 , $array , true ); // bool(false)
$hasNumber = in_array_recursive ( 7 , $array , true ); // bool(true)
function in_array_recursive ( mixed $needle , array $haystack , bool $strict ): bool
foreach ( $haystack as $element ) if ( $element === $needle ) return true ;
>
$isFound = false ;
if ( is_array ( $element )) $isFound = in_array_recursive ( $needle , $element , $strict );
>
if ( $isFound === true ) return true ;
>
>
If you’re creating an array yourself and then using in_array to search it, consider setting the keys of the array and using isset instead since it’s much faster.
$slow = array( ‘apple’ , ‘banana’ , ‘orange’ );
if ( in_array ( ‘banana’ , $slow ))
print( ‘Found it!’ );
$fast = array( ‘apple’ => ‘apple’ , ‘banana’ => ‘banana’ , ‘orange’ => ‘orange’ );
if (isset( $fast [ ‘banana’ ]))
print( ‘Found it!’ );
array_search
Замечание:
Если needle является строкой, сравнение происходит с учетом регистра.
Если третий параметр strict установлен в TRUE , то функция array_search() будет искать идентичные элементы в haystack . Это означает, что также будут проверяться типы needle в haystack , а объекты должны быть одни и тем же экземпляром.
Возвращаемые значения
Возвращает ключ для needle , если он был найден в массиве, иначе FALSE .
Если needle присутствует в haystack более одного раза, будет возвращён первый найденный ключ. Для того, чтобы возвратить ключи для всех найденных значений, используйте функцию array_keys() с необязательным параметром search_value .
Эта функция может возвращать как boolean FALSE , так и не-boolean значение, которое приводится к FALSE . За более подробной информацией обратитесь к разделу Булев тип. Используйте оператор === для проверки значения, возвращаемого этой функцией.
Список изменений
Версия | Описание |
---|---|
5.3.0 | Вместе со всеми внутренними функциями PHP начиная с 5.3.0, array_search() возвращает NULL , если ей были переданы неверные параметры. |
4.2.0 | До PHP 4.2.0, array_search() при неудаче возвращал NULL вместо FALSE . |
Примеры
Пример #1 Пример использования array_search()
$array = array( 0 => ‘blue’ , 1 => ‘red’ , 2 => ‘green’ , 3 => ‘red’ );
?php
$key = array_search ( ‘green’ , $array ); // $key = 2;
$key = array_search ( ‘red’ , $array ); // $key = 1;
?>
Смотрите также
- array_keys() — Возвращает все или некоторое подмножество ключей массива
- array_values() — Выбирает все значения массива
- array_key_exists() — Проверяет, присутствует ли в массиве указанный ключ или индекс
- in_array() — Проверяет, присутствует ли в массиве значение
array_search
array_search-ищет в массиве заданное значение и в случае успеха возвращает первый соответствующий ключ.
Description
array_search(mixed $needle, array $haystack, bool $strict = false): int|string|false
Parameters
Note:
Если needle является строкой, сравнение выполняется с учетом регистра.
Если третий параметр strict установлен в true то array_search () функция будет искать идентичные элементы в haystack . Это означает, что он также будет выполнять строгое сравнение типов needle в haystack , и объекты должны быть одним и тем же экземпляром.
Return Values
Возвращает ключ для needle если он найден в массиве, в противном случае — false .
Если needle найдена в haystack более одного раза, возвращается первый соответствующий ключ. Чтобы вернуть ключи для всех совпадающих значений, используйте вместо этого array_keys () необязательный параметр search_value .
Эта функция может возвращать логическое значение false , но также может возвращать не-логическое значение, которое оценивается как false . Пожалуйста, прочтите раздел о логических значениях для получения дополнительной информации. Используйте оператор === для проверки возвращаемого значения этой функции.
Examples
Пример # 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; ?>
See Also
- array_keys () — возвращает все ключи или подмножество ключей массива
- array_values () — Возвращает все значения массива
- array_key_exists () — Проверяет, существует ли данный ключ или индекс в массиве
- in_array () — Проверяет, существует ли значение в массиве
PHP 8.2
(PHP 5 5.3.0,7,8)array_replace_recursive Заменяет элементы из переданных массивов в первый рекурсивно array_replace_recursive()заменяет значения
(PHP 4,5,7,8)array_reverse Возвращает an с элементами по порядку Принимает входной массив и возвращает новый с обратным порядком элементов.
(PHP 4,5,7,8)array_shift элемент от начала array_shift()сдвигает первое значение off и возвращает его,сокращая на один элемент перемещение
(PHP 4,5,7,8)array_slice Извлечение array_slice()возвращает последовательность элементов из указанных параметрами offset и length.