Я пытаюсь понять функцию array_merge ()

Я получаю эти результаты в таком порядке …

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);

-1

Решение

Проблема здесь в том, что если первый или второй аргумент 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) }
2

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector