2012-03-12 54 views
0

我有一个输出这些值的数组:获取特定数据从阵列的基础上,另一种价值

Array ( 
    [0] => stdClass Object ( 
     [ID] => 6585 
     [COLOR] => red 
     [Name] => steve 
     ) 
    [1] => stdClass Object ( 
     [ID] => 5476 
     [COLOR] => blue 
     [Name] => sol 
     ) 
    [2] => stdClass Object ( 
     [ID] => 7564 
     [COLOR] => yellow 
     [Name] => jake 
     ) 
    [3] => stdClass Object ( 
     [ID] => 3465 
     [COLOR] => green 
     [Name] => helen 
     ) 
    ) 

现在,我就知道这个人的ID,我需要得到的颜色值具体的价值集。请问这最好是如何实现的?

+0

如何将数据转换为此格式?首选的方法是将您的ID作为数组中的键,以便您可以使用$ arr [$ id] - > COLOR引用它,但对于当前格式,这是不可能的。 – 2012-03-12 16:44:38

+0

它就是这样给出的,这意味着我可以让它们成为数组键。它也已经在一个函数中,所以我们不能在函数中有一个函数? – 2012-03-12 16:49:45

+0

请选择最能帮助您的答案。 – hakre 2012-07-03 09:14:40

回答

4

事情是这样的:

function getColorById($arr, $id){ 
    foreach($arr as $item){ 
     if ($item->ID == $id) 
      return $item->COLOR; 
    } 
    return "blah!"; 
} 

使用像echo getColorById($arr, 3465);

编辑: 你的数据的方式导致放缓的访问时间。更好的建议是(因为它似乎是ID是唯一的),你宁愿将它作为你的数组的关键。你现在有整数索引。构建阵列(除非你是从超越你有控制的一些区域中受吧)类似下面:下面

$arr = array(); 
$arr["ID_4634"] = <object>; 
+0

此解决方案可以工作,但会比必要的慢得多,特别是随着数据量的增长。数据可能应该重新格式化以按照他需要的方式查询数组。 – 2012-03-12 16:48:52

+0

是的!你是对的,我认为这是不必要的,因为其他人都这么做了。或者等一下,我会更新我的帖子。谢谢:) – SuperSaiyan 2012-03-12 16:50:46

+0

嗨,它已经在一个函数中,所以我们不能在函数中有一个函数,我们可以吗? – 2012-03-12 16:55:02

2

您可能想要更改存储方式以便更快地访问。

使用当前格式,您需要遍历元素并比较颜色,直到找到匹配。

for($i=0;$i<count($array);$i++){ 
    if($array[$i]['ID'] == $id) 
    return $array[$i]['COLOR'] 
} 

或者,以ID的密钥存储它。

+1

按颜色搜索,不按'ID' – Chris 2012-03-12 16:47:58

+0

@Chris哦错过了:p固定。 – Pheonix 2012-03-12 17:32:25

0

IDTry:

for($i=0; $i<count($array); $i++) 
{ 
    if($array[$i]['ID'] == $id) 
    return $array[$i]['COLOR']; 
} 
1
$users = array(); 
$count = count($arr); 
for ($i = 0; $i < $count; $i++) { 
    $users[$arr[$i]['ID']] = array(
     'Name' => $arr[$i]['Name'], 
     'COLOR' => $arr[$i]['COLOR'] 
    ); 
} 
echo $users[$id]['COLOR']; 

其中$ ARR代表了数组你在你的初始文章中输出,$ id是你想要访问的颜色的人的ID。您也可以通过使用

echo $users[$id]['Name'];