php сравнивать ключи массива, а не значения - PullRequest
2 голосов
/ 27 мая 2010

Я успешно использую array_key_exists (), как описано в php.net

Пример:

<?php
$search_array = array('first' => 1, 'second' => 4);
if (array_key_exists('first', $search_array)) {
    echo "The 'first' element is in the array";
}
?>

Но, возьмите значения, и это не сработает.

<?php
$search_array = array('first', 'second');
if (array_key_exists('first', $search_array)) {
    echo "The 'first' element is in the array";
}
?>

Не уверен, как сравнивать только 2 массива только по их ключам.

Ответы [ 5 ]

12 голосов
/ 27 мая 2010

Первый пример - ассоциативный массив: ключи с присвоенными значениями. Второй пример - более симпатичный способ сказать:

array(0 => 'first', 1 => 'second')

Для второго вам нужно будет использовать in_array . Вы не должны проверять наличие ключа, который делает array_key_exists, а скорее наличие значения, которое in_array делает.

if(in_array('first', $array))
5 голосов
/ 27 мая 2010

В PHP каждый элемент в массиве состоит из двух частей: ключ и значение .

Если вы вручную не укажете, какие ключи вы хотите прикрепить к каждому значению, PHP присваивает каждому элементу числовой индекс, начинающийся с 0 и увеличивающийся на 1.

Так что разница между

array('first','second')

и

array('first'=>1,'second'=>4)

означает, что первый не имеет пользовательских ключей. (На самом деле это ключи 0 и 1)

Если бы вы делали print_r() на первом, то это было бы что-то вроде

Array {
    [0] => "first",
    [1] => "second"
}

тогда как второй будет выглядеть

Array {
    ["first"]  => 1,
    ["second"] => 2
}

Итак, чтобы проверить, существует ли ключ «first», вы должны использовать

array_key_exists('first',$search_array);

чтобы проверить, существует ли значение"first", вы должны использовать

in_array('first',$search_array);
0 голосов
/ 20 августа 2015

В PHP, если вы не даете ключ к элементу массива, они принимают значение ключа по умолчанию.

 $search_array = array(0=>'first', 1=>'second');

В любом случае вы все еще можете решить эту проблему, используя функцию array_flip, как показано ниже.

$search_array = array('first', 'second');
if (array_key_exists('first', array_flip($search_array))) {
    echo "The 'first' element is in the array";
}
0 голосов
/ 27 мая 2010

Во втором примере ключи цифровые, ваш $search_array на самом деле выглядит так:

array(0=>'first', 1=>'second');

поэтому они key 'first' не существуют, value 'first' существует. так

in_array('first', $search_array);

- это функция, которую вы хотели бы использовать.

0 голосов
/ 27 мая 2010

во втором примере вы не назначали ключи массива - вы просто создали базовый «список» объектов

используйте in_array("first", $search_array);, чтобы проверить, находится ли значение в обычном массиве

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...