2014-07-05 119 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; 
相关问题