如果函数返回数组,PHP无法使用list转换数组?

时间:2014-09-22 02:22:04

标签: php arrays function

这个让我很难过。我想弄清楚为什么这不起作用。我有一个返回数组的函数。我想使用list将该数组放入变量中。它似乎没有工作。这就是我所拥有的:

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'];

在这种特殊情况下,我做错了什么?列表函数是否存在某种限制会阻止其工作? (注意,上面显然不是真正的功能或正确定义,仅作为示例提供。)

3 个答案:

答案 0 :(得分:2)

来自the manual

  

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

答案 1 :(得分:1)

您可以使用 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));

答案 2 :(得分:0)

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

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