如何在 PHP 中求解 var_dump($testArray)

How to Solve var_dump($testArray) in PHP

下面的代码有什么问题?它会输出什么?如何修复?

$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(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,则 return 值将为 NULL。例如,尽管人们可能合理地期望 array_merge($someValidArray, NULL) 之类的调用会简单地 return $someValidArray,但它却 returns NULL! (更糟糕的是,PHP 文档中对此根本没有很好的记录。)

因此,调用 $testArray = array_merge($testArray, $referenceTable['val2']) 计算结果为 $testArray = array_merge($testArray, 3),并且由于 3 不是数组类型,因此对 array_merge() returns NULL 的调用最终将 $testArray 设置为 NULL。然后,当我们进行下一次调用 array_merge() 时,$testArray 现在为 NULL,因此 array_merge() 再次 returns NULL。 (这也解释了为什么第一个警告抱怨参数 #2 而第二个警告抱怨参数 #1。)

解决这个问题很简单。如果我们简单地将第二个参数类型转换为一个数组,我们将得到想要的结果。