Как решить var_dump ($ testArray) в переполнении стека

В чем проблема с кодом ниже? Что это будет выводить? Как это можно исправить?

$referenceTable = array();
$referenceTable['val1'] = array(1, 2);
$referenceTable['val2'] = 3;
$referenceTable['val3'] = array(4, 5);

$testArray = array();

$testArray = array_merge($testArray, $referenceTable['val1']);
var_dump($testArray);
$testArray = array_merge($testArray, $referenceTable['val2']);
var_dump($testArray);
$testArray = array_merge($testArray, $referenceTable['val3']);
var_dump($testArray);

Спасибо

-2

Решение

Вывод будет следующим:

array(2) { [0]=> int(1) [1]=> int(2) }
NULL
NULL

Вы также можете увидеть два сгенерированных предупреждения, похожие на следующее:

Warning: array_merge(): Argument #2 is not an array

Warning: array_merge(): Argument #1 is not an array,

Проблема здесь в том, что если первый или второй аргумент array_merge() это не array, возвращаемое значение будет NULL. Например, хотя можно разумно ожидать, что такой вызов, как array_merge($someValidArray, NULL)просто вернется $someValidArrayвместо этого возвращается NULL! (И что еще хуже, это совсем не документировано в документации PHP.)

В результате звонок в
$testArray = array_merge($testArray, $referenceTable['val2'])
оценивает $testArray = array_merge($testArray, 3)и, поскольку 3 не относится к типу array, этот вызов array_merge () возвращает NULL, что, в свою очередь, приводит к установке $testArray равно NULL. Затем, когда мы перейдем к следующему вызову array_merge (), $testArray теперь NULL, поэтому array_merge () снова возвращает NULL. (Это также объясняет, почему первое предупреждение жалуется на аргумент № 2, а второе предупреждение жалуется на аргумент № 1.)

Исправить это просто. Если мы просто введем второй аргумент в массив, мы получим желаемые результаты.

1

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

Других решений пока нет …

По вопросам рекламы [email protected]