2010-03-23 63 views
7

在php中如何訪問數組的值而不使用方括號來表示鍵值?我特別的問題是我想訪問函數返回的數組的元素。說功能(參數)返回一個數組。爲什麼是 $ var = function(args)[0]; 大吼我方括號?我可以做類似 $ var = function(args).value(0); 還是我缺少一些非常基本的東西?訪問在php中沒有方括號的數組值

+0

php將此引用爲函數數組引用。 從版本5開始,它已被包含在php中。4 http://php.net/manual/en/migration54.new-features.php – Steve 2015-11-13 15:56:24

回答

10

正如其他人所說,你幾乎必須使用一個臨時變量:

$temp = myFunction(); 
$value = $temp[0]; 

但是,如果知道結構要返回的數組可以避免臨時變量。

如果你只是想第一個成員:

$value = reset(myFunction()); 

如果你想在最後一個成員:

$value = end(myFunction()); 

如果你想兩者之間的任何一個:

// second member 
list(, $value) = myFunction(); 

// third 
list(, , $value) = myFunction(); 

// or if you want more than one: 

list(, , $thirdVar, , $fifth) = myFunction(); 
+0

嘿,聰明! 'list()'永遠不會令我驚歎。 +1。 – 2010-03-23 01:29:45

+1

reset()和end()要求參數是引用。你在最近版本的php中得到E_STRICT通知。 – goat 2010-03-23 01:43:08

+1

是的,我一直在做這個與臨時變量,但想知道我是否真的需要。現在我只是想知道_why_我必須。但是在任何情況下,你的list()用法都很聰明。謝謝! – amb 2010-03-23 05:27:17

2

在PHP中,得到一個數組作爲函數的結果時,你不幸需要做一個額外的步驟:

$temp_array = function($args); 
$var = $temp_array[0]; 

對於對象,這已經在PHP 5中放鬆你可以這樣做:

$echo function($args)->property; 

(提供function返回過程的對象。)

+2

這很糟糕,但這是做到這一點的唯一方法。討厭PHP的原因之一。 – 2010-03-23 01:21:56

+0

@Luke是真的,但不是*那*壞imo。誰知道,它可能會修復在PHP 7 :) – 2010-03-23 01:23:00

+0

@Luke - 這有點強大不是嗎? – nickf 2010-03-23 01:25:11

1
function getKey($array, $key){ 
    return $array[$key]; 
} 

$var = getKey(myFunc(args), $key); 

沒有辦法做這不幸的是不添加用戶功能。這只是語法的一部分。

你總是可以只是做舊的方式方法

$array = myFunc(); 
$value = $array[0]; 
1

究竟符合您的期望是:

echo pos(array_slice($a=myFunc(), pos(array_keys(array_keys($a), 'NameOfKey')); 

回答的Kinetix健,臺北

如果你想要這個
1

,所以最好將返回一個對象(不幸的是,它完全跛腳PHP犯規支持此)。下面有一個瘋狂的辦法,我能雖然想不通,出新意(請不要這麼做!):

function returnsArray(){ 
    return array("foo" => "bar"); 
} 

echo json_decode(json_encode((object)returnsArray()))->foo; 
//prints 'bar' 

所以yeah..until他們增加對數組中的PHP支持取消引用,我想你應該可能只是轉換返回數組作爲一個對象:

return (object)array("foo" => "bar"); 

,然後你可以做returnsArray() - > FOO,因爲PHP放寬非關聯化的對象,但不是數組..或課程的編寫一個包裝函數像其他人所說。

+0

也是,看起來像這個最近已經加入到php的支持? http://wiki.php.net/rfc/functionarraydereferencing – mutexkid 2010-11-17 20:18:16