2008-10-05 44 views
7
function returnsAnArray() 
{ 
    return array ('test'); 
} 

echo returnsAnArray()[0]; 

在PHP中生成語法錯誤。直接從返回數組中獲取元素而不將結果分配給臨時變量的最有效方法是什麼?索引返回數組的最有效方法?

+0

如果實際上沒有語法,怎麼會出現語法錯誤? – artistoex 2011-06-07 23:16:03

回答

5

這裏有一種方法,使用list語言結構

function returnsAnArray() 
{ 
    return array ('test'); 
} 

list($foo)=returnsAnArray(); 

您可以通過此與array_slice

list($third,$fourth,$fifth)=array_slice(returnsAnArray(), 2, 3); 
+0

爲什麼downvote?這是訪問數組的有效方法... – 2008-10-05 20:47:01

+0

這實際上是訪問數組的一種非常好的方式。不過,我曾經看到有人絆倒它,也許是因爲它超出了標準的C-flavor語法(即分配給函數的東西)。 – pilsetnieks 2008-10-05 21:38:02

+0

那麼你如何概括它來訪問數組中的'$ n`值? – moritz 2008-10-06 07:34:37

1

如果只有一個陣列中的成員這將工作:

<?php 
echo current(returnsAnArray()); 
?> 
+0

不,它不會。 current()需要引用,因此值無法傳遞。儘管如此,從returnsAnArray()返回也是可行的。 – 2008-10-05 20:46:17

0

你可以對未知長度的索引數組做到這一點。

foreach (returnsAnArray() as $item) 
    echo $item; 
-1

結合從偏移搶元素序列我問自己,爲什麼一個想避免爲返回的數組創建一個臨時變量。爲什麼你不只是返回一個值而不是整個數組?也許你將不得不推翻你的程序邏輯。

或者它是一個性能/內存問題?考慮使用references而不是始終創建一個新的數組對象並返回它。

3

定義一個用於從數組中返回特定索引的新函數。

function arr_index($arr, $i) { return $arr[$i]; } 

您可能想在其中添加一些錯誤和類型檢查。

,然後用它是這樣的:

echo arr_index(returnsAnArray(), 0); 

編碼快樂:)

1

對於常規的數字索引數組, func()返回這樣一個數組,$ n是你想要的索引:

array_pop(array_slice(func(),$n,1));

對於關聯數組(例如字符串或其他東西作爲鍵)或數字數組,它們沒有被編號並且從0..n完成,這有點複雜。其中$關鍵的關鍵是你想要的:

array_pop(array_intersect_keys(func(),Array($key => ""));

這也將在第一種情況下工作。

相關問題