2009-02-23 74 views
2

$ clients = $ CLIENT-> find($ options); $ client = $ clients [0];有沒有辦法一步到位呢?

編輯:我意識到我應該更清楚。 $ CLIENT-> find總是返回一個對象數組,但我想要一行代碼將數組(只有一個對象)轉換爲一個對象。

回答

7
$client = array_shift($CLIENT->find($options)); 
+0

謝謝,應該已經看到了這裏一英里遠 – fakingfantastic 2009-02-23 20:10:49

0

除非($CLIENT->find($options))[0]工程(IIRC我不認爲它在PHP中有效,但不要拿我的話),我不認爲你可以壓縮這一點。不過,我真的不認爲值得擔心 - 如果你需要一個單語句表達式,只需編寫一個函數即可。

function fozzyle($options) { 
    $clients = $CLIENT->find($options); 
    return $clients[0]; 
} 
0

$ client = $ CLIENT-> find($ options)[0];

不起作用?

+0

直到現在,這就是要點。這將有望在PHP 6中得到解決。 – 2009-02-23 18:44:09

4
$client = reset($CLIENT->find($options)); 

編輯:這裏有一個不太令人模糊,你應該用這個來代替:

list($client) = $CLIENT->find($options); 

他們是不相同的,雖然;第一個也會在預期有單個標量的地方工作(在函數的參數列表中),但第二個不會(list()返回void)。

+0

這確實有用,但我個人建議不要使用它。問題中兩行代碼的目的比這個簡明版本更加清晰。 – 2009-02-23 18:47:35

+0

好點,我也會添加更好的。 – flussence 2009-02-23 19:07:01

0

你考慮過method-chaining嗎?

這將允許您只用一行代碼就可以做很多事情。還要注意,這對於更大和更長期的OO解決方案會更好。如果你只需要一個快速和骯髒的解決方案,可能只是一個返回數組中第一個項目的自定義函數。

幫助:如果有人可以找到一個更好的方法鏈參考,請更新此。

0

$ client = array_shift($ CLIENT-> find($ options));

$ client將是你的對象或NULL如果find()不返回任何東西。