2013-07-13 73 views
-1

我有兩個對象來自數據庫查詢。我已經將他們限制在視圖所需的最低限度。他們看起來像這樣:php提取對象親屬

array(189) { 
    [0]=> 
    object(stdClass)#31 (2) { 
    ["id"]=> 
    string(1) "187" 
    ["name"]=> 
    string(13) "Something" 
    } 
} 

array(3) { 
    [0]=> 
    object(stdClass)#337 (10) { 
    ["id"]=> 
    string(1) "1" 
    ["type"]=> 
    string(1) "2" 
    ["for"]=> 
    string(3) "187" 
    ... 
    } 
} 

我在foreach循環中運行第二個對象。我想引用「for」到第一個的「id」,並返回「name」,從而產生「Something」。我試圖至少使用索引失敗,但我想避免使用索引。

我想使用我的第二個對象的值「for」,將它鏈接到我的第一個對象的「id」,並輸出匹配的「name」,在我的例子中是「Something」。我如何實現這一目標?

謝謝!

+0

這真的不清楚你問這裏。也許顯示一些想要的結果的僞代碼? – deceze

+0

聽起來像你想穿過第一個數組,並找到id = 187的對象,所以你可以訪問它的其他屬性?除非第一個數組的鍵是對象的id號(當前不是),否則您需要遍歷每個項並測試其id屬性,直到找到所需的項。 – user113215

+0

謝謝。循環瀏覽每個項目會不會很慢?我認爲事先準備數據會比較好,因爲在將它發送給我的觀點之前,這是正確的嗎? – veksen

回答

1

這個問題有點不清楚,但它聽起來像你想從第一個數組中找到對象,id等於"187",所以你可以訪問它的其他屬性?

除非第一個數組的鍵是對象的ID號(當前不是),否則您需要遍歷第一個數組中的每個項並測試其屬性id,直至找到所需的值。換句話說,嵌套循環。

也許重組第一個陣列會更好。另一種方法是創建在id上鍵入的第一個數組,而不是自動生成的順序鍵。這樣可以讓您在不進行搜索的情況下輕鬆訪問您想要的項目(例如,$first[$id]['name'])。適當的方法將取決於該查找操作需要進行的頻率以及陣列的大小。

如果id被guarantted是唯一的,那麼這樣的事情可以預先處理陣列,它是在id屬性鍵:

// $array189 is the first array from your question 
$first = array(); 
foreach ($array189 as $item) { 
    $first[ $item->id ] = $item; 
} 
unset($array189); 
+0

根據他的數組大小,索引和身份證,他們不匹配,所以我不認爲這會工作。 – Prix

+0

@Prix Oops,將'$ item ['id']'修正爲'$ item-> id'。這將構建一個新的數組,使用每個項目的id屬性作爲關鍵字(以及項目本身作爲值)。假設所有項目都有'id',並且沒有重複項,我沒有看到問題。 – user113215

+0

是的,這將工作,並可能比2循環更快。 – Prix