如何在 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。)
解决这个问题很简单。如果我们简单地将第二个参数类型转换为一个数组,我们将得到想要的结果。
下面的代码有什么问题?它会输出什么?如何修复?
$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。)
解决这个问题很简单。如果我们简单地将第二个参数类型转换为一个数组,我们将得到想要的结果。