2011-06-24 103 views
11

假設我有一個對象在PHP中的數組,像這樣:如何從數組中的每個對象獲取對象屬性?

Array (
    [0] => stdClass Object (
      [id] => 1 
      [name] => Title One 
     )  
    [1] => stdClass Object (
      [id] => 2 
      [name] => Title Two 
     ) 

    [2] => stdClass Object (
      [id] => 7 
      [name] => Title Seven 
     ) 
) 

什麼是獲取ID數組的最佳方式(即最快)?即array(1,2,7)我可以手動循環,但我覺得必須有更好的方法。

剛看到this in the similar questions,但是對於接受的答案是否真的是最好的方式還有一點爭論,加上它是在2年前。我在PHP 5.3上。

+1

根據您的場景,您可能需要考慮使用[關聯數組](http://php.net/manual/en/language.types.array.php),而不是帶有id的對象數組'成員。 –

回答

3

最快的方法是簡單循環(foreachfor,while)。使用回調函數會招致不必要的開銷。

我會看看是否有辦法通過構建對象的初始數組的代碼創建列表。

0

您是否嘗試過array_keys功能?

編輯:

<?php 
    $ids = array(); 
    for($c=0; $c<count($the_array); $c++) $ids[$c] = $the_array[$c]->id; 
?> 
+0

在這個例子中,'array_keys'會返回'[0,1,2]'而不是'[1,2,7]'。但我想我可以將ID存儲爲數組鍵...... – DisgruntledGoat

+0

是的,沒錯。我認爲迭代是強制性的。如果你不想迭代,像array_map這樣的函數在任何情況下都會爲你做,並且這會導致不必要的開銷,因爲調用回調函數(由@webbiedave報告)。我通過添加「明顯的解決方案」來編輯我的帖子。 – bitfox

0

您還可以使用extract_property()這是專門爲這個工作設計了一個很好的測試庫(免責聲明:我是作者)。

0

我用紅豆,由於某種原因傳遞「的getID」並沒有爲我工作,所以這裏是我如何做它:

$ids = array_map(function($val){return $val->id;}, $objects); 
4

自PHP 7.0你可以使用內置函數array_column爲,這需要要採摘的輸入陣列和屬性的名稱:

$ids = array_column($input, 'id'); 
// array(0 => 1, 1 => 2, 2 => 7) 

作爲第三個參數,則可以任選地提供一個索引鍵以及:

$ids = array_column($input, 'name', 'id'); 
// array(1 => 'Title One', 2 => 'Title Two', 7 => 'Title Seven') 

請注意的是,雖然它已經可以在PHP 5.5.0,對於對象的數組支持PHP 7.0中首次引入。

相關問題