2014-07-05 117 views
0

我有一個帶有項目ID的PHP頁面。我使用一個類運行一個查詢,並返回一些與這個項目ID關聯的項目的屬性數據集。數據返回下面的對象格式:匹配來自數組對象的值

Array 
(

[0] => stdClass Object 
    (
     [id] => 1 
     [projectID] => 469 
     [itemID] => item_1 
     [weight] => 20 
     [length] => medium 
    ) 

[1] => stdClass Object 
    (
     [id] => 2 
     [projectID] => 469 
     [itemID] => item_2 
     [weight] => 50 
     [length] => medium 
    ) 

[2] => stdClass Object 
    (
     [id] => 3 
     [projectID] => 469 
     [itemID] => item_4 
     [weight] => 75 
     [length] => long 
    ) 

) 

所以,現在我需要將這些屬性添加到頁面元素。每個頁面元素都有唯一的ID,與返回的數據中的itemID匹配,但我很難弄清楚如何匹配兩者。

<div id="item_2">'.($myarray[1]['itemID'] == 'item_2' ? 
    $myarray[1]['weight'] : '0').' lb</div> 

<div id="item_2">'.($myarray[1]['itemID'] == 'item_2' ? 
    $myarray[1]['length'] : '0').' ft</div> 


<div id="item_3">'.($myarray[2]['itemID'] == 'item_3' ? 
    $myarray[2]['weight'] : '0').' lb</div> 

<div id="item_3">'.($myarray[2]['itemID'] == 'item_3' ? 
    $myarray[2]['length'] : '0').' ft</div> 
+0

如果'itemId'鍵唯一然後做一個循環(或使用array_walk),將經過對象返回數組,將產生陣列由'itemId'索引。然後在索引'$ arr ['item_3']'你將有原始數組的數據,所以你可以例如echo'

'.$arr['item_3']->wiegth.'
'。不知道,如果這是你的意思。我認爲你應該更清楚地回答問題。 – doc

+0

我可以在頁面上有一些項目,我認爲這會影響我的加載時間,我是通過循環該數組來匹配每個項目的一組屬性。我希望我可以簡單地做$ myarray ['item_4'] ['weight']但我不能添加頂端節點ID,即$ myarray [2] ['item_4'] ['weight']。有沒有辦法打破這個巨大的對象? – santa

+0

如果您遍歷整個數組ONCE並從原始數組中創建另一個數組,您可以簡單地執行'$ myarray ['item_4'] - > weight'。 – doc

回答

1

假設item_id鍵唯一此代碼創建陣列從原始陣列由item_id索引。

$newArr = array(); 
//create reindexed array based on data from original array ($orgArr) 
array_walk($orgArr, function($v) use (& $newArr) { $newArr[$v->item_id] = $v; }); 

然後您可以通過以下方式訪問各個屬性。

echo $newArr['item_1']->weight; 
echo $newArr['item_2']->length; 
相關問題