У меня есть этот массив:
$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
?
array_key_exists () поиск ключей, а не значений.
В вашем первом случае вы x3
в стоимости.
Так что это не поиск.
В этом случае вы можете использовать in_array (), эта функция ищет
для ценностей.
Во втором случае x3
ключ, следовательно, поиск правильно.
Ключи не нулевые, никогда.
$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)
вместо.
использование in_array()
вместо array_key_exists()
В твоем случае,
$variableNames = ['x1',
'x2',
'x3',
'x4',
'x5',
'x6',
'x7'];
if (in_array("x3", $this->variableNames)) {
echo "Found x3";
}
Нет, ваш неверный. Функция работает хорошо, вы просто используете ее неправильно. 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()
, оба пути верны, один просто удобнее другого.