我试图了解array_merge()函数

时间:2018-12-20 14:16:38

标签: php arrays

我正在按顺序获得这些结果...

  

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

     

警告array_merge():参数2不是第12行的数组

     

NULL

     

警告array_merge():参数1不是第14行的数组

     

NULL

我正试图了解为什么..

这是我的代码:

$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 个答案:

答案 0 :(得分:2)

这里的问题是,如果array_merge()的第一个或第二个参数都不是数组,则返回值为NULL

结果,对$testArray = array_merge($testArray, $referenceTable['val2'])的调用的求值为$testArray = array_merge($testArray, 3),并且由于3的类型不是array,因此对array_merge()的调用返回{ {1}},其结果是将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);