2012-03-12 88 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']; 
相關問題