2014-09-22 44 views
-1

這一個正在困擾着我。我試圖找出爲什麼這不起作用。我有一個函數返回一個數組。我想使用list將該數組放入變量中。它似乎沒有工作。這是我有:如果函數返回數組,則PHP無法使用列表轉換數組?

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

任何事情,我在這種特殊情況下做錯了什麼?列表函數是否有某種限制來阻止它的工作? (注意,上述顯然不是一個真正的功能或正確定義,僅作爲示例呈現)。

回答

0

由於列表功能只與任一數字(或無鑰匙)的作品,你必須能夠使用到它們插入變量之前剝離從數組中鍵名單。

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

the manual

列表()只適用於數字數組並假定數字索引從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); 
+0

感謝關於數組索引的註釋。這讓我可以通過使用array_values來解決我的問題。 – 2014-09-22 02:32:52

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