Php массивы проверка вхождения

array_key_exists

Функция array_key_exists() возвращает true , если в массиве присутствует указанный ключ key . Параметр key может быть любым значением, которое подходит для индекса массива.

Список параметров

Массив с проверяемыми ключами.

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

Возвращает true в случае успешного выполнения или false в случае возникновения ошибки.

Замечание:

array_key_exists() ищет ключи только на первом уровне массива. Внутренние ключи в многомерных массивах найдены не будут.

Примеры

Пример #1 Пример использования array_key_exists()

$search_array = array( ‘first’ => 1 , ‘second’ => 4 );
if ( array_key_exists ( ‘first’ , $search_array )) echo «Массив содержит элемент ‘first’.» ;
>
?>

Пример #2 array_key_exists() и isset()

isset() не возвращает true для ключей массива, указывающих на null , а array_key_exists() возвращает.

$search_array = array( ‘first’ => null , ‘second’ => 4 );

// возвращает false
isset( $search_array [ ‘first’ ]);

// возвращает true
array_key_exists ( ‘first’ , $search_array );
?>

Примечания

Замечание:

По причинам обратной совместимости, array_key_exists() возвращает true , если key является свойством объекта ( object ), переданным в качестве параметра array . Поведение устарело в PHP 7.4.0 и удалено в PHP 8.0.0.

Чтобы проверить, содержит ли объект какое-либо свойство, используйте функцию property_exists() .

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

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

User Contributed Notes 3 notes

When you want to check multiple array keys:

$array = [];
$array [ ‘a’ ] = » ;
$array [ ‘b’ ] = » ;
$array [ ‘c’ ] = » ;
$array [ ‘d’ ] = » ;
$array [ ‘e’ ] = » ;

// all given keys a,b,c exists in the supplied array
var_dump ( array_keys_exists ([ ‘a’ , ‘b’ , ‘c’ ], $array )); // bool(true)

function array_keys_exists (array $keys , array $array ): bool
$diff = array_diff_key ( array_flip ( $keys ), $array );
return count ( $diff ) === 0 ;
>

In PHP7+ to find if a value is set in a multidimensional array with a fixed number of dimensions, simply use the Null Coalescing Operator: ??

So for a three dimensional array where you are not sure about any of the keys actually existing

// use:
$exists = array_key_exists ( $key3 , $arr [ $key1 ][ $key2 ]??[]) ;

I took hours for me to debug, and I finally recognized that,

You have to reset the $array before using array_key_exists
reset($array);
array_key_exists($needle,$array);

  • Функции для работы с массивами
    • array_​change_​key_​case
    • array_​chunk
    • array_​column
    • array_​combine
    • array_​count_​values
    • array_​diff_​assoc
    • array_​diff_​key
    • array_​diff_​uassoc
    • array_​diff_​ukey
    • array_​diff
    • array_​fill_​keys
    • array_​fill
    • array_​filter
    • array_​flip
    • array_​intersect_​assoc
    • array_​intersect_​key
    • array_​intersect_​uassoc
    • array_​intersect_​ukey
    • array_​intersect
    • array_​is_​list
    • array_​key_​exists
    • array_​key_​first
    • array_​key_​last
    • array_​keys
    • array_​map
    • array_​merge_​recursive
    • array_​merge
    • array_​multisort
    • array_​pad
    • array_​pop
    • array_​product
    • array_​push
    • array_​rand
    • array_​reduce
    • array_​replace_​recursive
    • array_​replace
    • array_​reverse
    • array_​search
    • array_​shift
    • array_​slice
    • array_​splice
    • array_​sum
    • array_​udiff_​assoc
    • array_​udiff_​uassoc
    • array_​udiff
    • array_​uintersect_​assoc
    • array_​uintersect_​uassoc
    • array_​uintersect
    • array_​unique
    • array_​unshift
    • array_​values
    • array_​walk_​recursive
    • array_​walk
    • array
    • arsort
    • asort
    • compact
    • count
    • current
    • end
    • extract
    • in_​array
    • key_​exists
    • key
    • krsort
    • ksort
    • list
    • natcasesort
    • natsort
    • next
    • pos
    • prev
    • range
    • reset
    • rsort
    • shuffle
    • sizeof
    • sort
    • uasort
    • uksort
    • usort
    • each

    Источник

    in_array

    Ищет в haystack значение needle . Если strict не установлен, то при поиске будет использовано нестрогое сравнение.

    Список параметров

    Замечание:

    Если needle — строка, сравнение будет произведено с учетом регистра.

    Если третий параметр strict установлен в TRUE тогда функция in_array() также проверит соответствие типов параметра needle и соответствующего значения массива haystack .

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

    Возвращает TRUE , если needle был найден в массиве, и FALSE в обратном случае.

    Примеры

    Пример #1 Пример использования in_array()

    $os = array( «Mac» , «NT» , «Irix» , «Linux» );
    if ( in_array ( «Irix» , $os )) echo «Нашел Irix» ;
    >
    if ( in_array ( «mac» , $os )) echo «Нашел mac» ;
    >
    ?>

    Второго совпадения не будет, потому что in_array() регистрозависима, таким образом, программа выведет:

    Пример #2 Пример использования in_array() с параметром strict

    if ( in_array ( ‘12.4’ , $a , true )) echo «‘12.4’ найдено со строгой проверкой\n» ;
    >

    if ( in_array ( 1.13 , $a , true )) echo «1.13 найдено со строгой проверкой\n» ;
    >
    ?>

    Результат выполнения данного примера:

    1.13 найдено со строгой проверкой

    Пример #3 Пример использования in_array() с массивом в качестве параметра needle

    if ( in_array (array( ‘p’ , ‘h’ ), $a )) echo «‘ph’ найдено\n» ;
    >

    if ( in_array (array( ‘f’ , ‘i’ ), $a )) echo «‘fi’ найдено\n» ;
    >

    if ( in_array ( ‘o’ , $a )) echo «‘o’ найдено\n» ;
    >
    ?>

    Результат выполнения данного примера:

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

    • array_search() — Осуществляет поиск данного значения в массиве и возвращает соответствующий ключ в случае удачи
    • isset() — Определяет, была ли установлена переменная значением отличным от NULL
    • array_key_exists() — Проверяет, присутствует ли в массиве указанный ключ или индекс

    Источник

    in_array

    Ищет в haystack значение needle . Если strict не установлен, то при поиске будет использовано нестрогое сравнение.

    Список параметров

    Замечание:

    Если needle — строка, сравнение будет произведено с учётом регистра.

    Если третий параметр strict установлен в true , тогда функция in_array() также проверит соответствие типов параметра needle и соответствующего значения массива haystack .

    Замечание:

    До PHP 8.0.0 строковое значение параметра needle будет соответствовать значению массива 0 в нестрогом режиме, и наоборот. Это может привести к нежелательным результатам. Подобные крайние случаи существуют и для других типов. Если нет полной уверенности в типах значений, всегда используйте флаг strict , чтобы избежать неожиданного поведения.

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

    Возвращает true , если needle был найден в массиве, и false в противном случае.

    Примеры

    Пример #1 Пример использования in_array()

    $os = array( «Mac» , «NT» , «Irix» , «Linux» );
    if ( in_array ( «Irix» , $os )) echo «Нашёл Irix» ;
    >
    if ( in_array ( «mac» , $os )) echo «Нашёл mac» ;
    >
    ?>

    Второго совпадения не будет, потому что in_array() регистрозависима, таким образом, программа выведет:

    Пример #2 Пример использования in_array() с параметром strict

    if ( in_array ( ‘12.4’ , $a , true )) echo «‘12.4’ найдено со строгой проверкой\n» ;
    >

    if ( in_array ( 1.13 , $a , true )) echo «1.13 найдено со строгой проверкой\n» ;
    >
    ?>

    Результат выполнения данного примера:

    1.13 найдено со строгой проверкой

    Пример #3 Пример использования in_array() с массивом в качестве параметра needle

    if ( in_array (array( ‘p’ , ‘h’ ), $a )) echo «‘ph’ найдено\n» ;
    >

    if ( in_array (array( ‘f’ , ‘i’ ), $a )) echo «‘fi’ найдено\n» ;
    >

    if ( in_array ( ‘o’ , $a )) echo «‘o’ найдено\n» ;
    >
    ?>

    Результат выполнения данного примера:

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

    • array_search() — Осуществляет поиск данного значения в массиве и возвращает ключ первого найденного элемента в случае успешного выполнения
    • isset() — Определяет, была ли установлена переменная значением, отличным от null
    • array_key_exists() — Проверяет, присутствует ли в массиве указанный ключ или индекс

    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!’ );

    Источник

    Читайте также:  Http html form content type
Оцените статью