如果数组是由函数返回的,则PHP无法使用列表转换数组


PHP cannot convert an array using list if the array is returned by a function?

这个让我很困惑。我想弄清楚为什么它不起作用。我有一个函数,它返回一个数组。我想使用列表将该数组放入变量中。它似乎不起作用。这是我所拥有的:

function($x, $y, $z){
    return array('x' => $x, 'y' => $y, 'z' => $z);
}
list($x, $y, $z) = function($x, $y, $z);

然而,这似乎并没有将变量返回到$x、$y、$z变量中。

相反,我必须这样做:

function($x, $y, $z){
    return array('x' => $x, 'y' => $y, 'z' => $z);
}
$array = function($x, $y, $z);
$x = $array['x'];
$y = $array['y'];
$z = $array['z'];

在这种特殊情况下,我做错了什么?列表功能是否存在某种限制,从而无法正常工作?(注意,上面显然不是一个真实的函数,也不是正确定义的,只是作为一个例子)。

来自手册:

list()仅适用于数值数组,并假定数值索引从0开始。

只需将键更改为数字键,即可正常工作:

function($x, $y, $z){
    return array($x, $y, $z);
    // OR: return array_values(array('x' => $x, 'y' => $y, 'z' => $z));
}
list($x, $y, $z) = function($x, $y, $z);

您可以使用extract函数创建如下变量:

function foo($x, $y, $z){
    return array('x' => $x, 'y' => $y, 'z' => $z);
}
extract(foo($x, $y, $z));
// or you have to use the values of the array returned.
list($x, $y, $z) = array_values(foo($x, $y, $z));

由于list函数只能使用数字键(或不使用键),因此必须先从数组中剥离键,然后才能使用list将它们插入变量中。

list($x, $y, $z) = array_values(function($x, $y, $z));