Вот немного кода php. 0 находится в ассоциативном массиве явно. Если я попытаюсь вставить его в другой, он не будет назначен. Единственный способ, которым я знаю, как обойти это, это явно проверить, чтобы это было 0, используя ===
, Это единственный способ?
<?php
$vars['one'] = '31234';
$vars['two'] = 'sldf';
$vars['three'] = 1 - 1;
$return_array = [];
foreach ($vars as $key => $value){
echo "---------------Just value<br>";
var_dump($value);
echo "<br>";
$value != '' ? ($return_array[$key] = $value) : null;
echo "---------------array of key<br>";
var_dump($return_array[$key]);
echo "<br>";
}
?>
Я получил эту хорошую вещь обратно.
---------------Just value
string(5) "31234"---------------array of key
string(5) "31234"---------------Just value
string(4) "sldf"---------------array of key
string(4) "sldf"---------------Just value
int(0)
---------------array of key
NULL
В любом случае лучше, чем if ($key === 0) { // stuff }
?
Вы используете «слабое сравнение» при выполнении $value != ''
, Это также оценивается как ложное для 0. Смотрите таблицу для свободного сравнения Вот.
Если вы использовали $value !== ''
вместо этого он вставил бы 0 в массив.
Других решений пока нет …