array_key_exists не работает хорошо

У меня есть этот массив:

$variableNames = [
'x1',
'x2',
'x3',
'x4',
'x5',
'x6',
'x7'
];

Но когда я использую функцию array_key_exists следующим образом:

array_key_exists('x3', $this->variableNames)

Это возвращение false, Но если у меня есть этот массив:

$variableNames = [
'x1' => null,
'x2' => null,
'x3' => null,
'x4' => null,
'x5' => null,
'x6' => null,
'x7' => null
];

Это возвращение true, Как я могу использовать первый массив, и получить true?
В первом массиве значение также равно нулю, как и во втором массиве. Итак, почему первый массив возвращает false а второй массив вернуть true?

1

Решение

array_key_exists () поиск ключей, а не значений.

В вашем первом случае вы x3 в стоимости.

Так что это не поиск.

В этом случае вы можете использовать in_array (), эта функция ищет
для ценностей.

Во втором случае x3 ключ, следовательно, поиск правильно.

5

Другие решения

Ключи не нулевые, никогда.

$variableNames = [
'x1',
'x2',
'x3',
'x4',
'x5',
'x6',
'x7'
];

средства

$variableNames = [
0 => 'x1',
1 => 'x2',
2 => 'x3',
3 => 'x4',
4 => 'x5',
5 => 'x6',
6 => 'x7'
];

использование

in_array('x3', $this->variableNames)

вместо.

2

использование in_array() вместо array_key_exists()

В твоем случае,

$variableNames = ['x1',
'x2',
'x3',
'x4',
'x5',
'x6',
'x7'];

if (in_array("x3", $this->variableNames)) {
echo "Found x3";
}
0

Нет, ваш неверный. Функция работает хорошо, вы просто используете ее неправильно. array_key_exists ищет ключ, а не значение.

Первый предоставленный вами массив фактически обрабатывается как массив значений. У них есть индексные ключи, которые автоматически добавляются PHP. я ты print_r($variableNames), вы увидите, он вернет следующее.

$variableNames = [
0 => 'x1',
1 => 'x2',
2 => 'x3',
3 => 'x4',
4 => 'x5',
5 => 'x6',
6 => 'x7'
];

Вам нужно будет искать значение вместо этого. использование in_array() или же isset(), оба пути верны, один просто удобнее другого.

0