Я получаю эти результаты в таком порядке …
array (2) {[0] => int (1) [1] => int (2)}
ПРЕДУПРЕЖДЕНИЕ array_merge (): аргумент № 2 не является массивом в строке № 12
НОЛЬ
ПРЕДУПРЕЖДЕНИЕ array_merge (): аргумент № 1 не является массивом в строке № 14
НОЛЬ
И я пытаюсь понять, почему ..
Вот мой код:
$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);
Проблема здесь в том, что если первый или второй аргумент array_merge()
не является массивом, возвращаемое значение будет NULL
В результате звонок в $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
,
Исправить это просто. Если мы просто введем второй аргумент в массив, мы получим желаемые результаты. Исправленный array_merge()
Поэтому звонки будут следующими:
$testArray = array_merge($testArray, (array)$referenceTable['val1']);
var_dump($testArray);
$testArray = array_merge($testArray, (array)$referenceTable['val2']);
var_dump($testArray);
$testArray = array_merge($testArray, (array)$referenceTable['val3']);
var_dump($testArray);
который даст следующий результат:
array(2) { [0]=> int(1) [1]=> int(2) }
array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }
array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) }
Других решений пока нет …