2012-10-27 168 views
0

這是一個非常愚蠢的問題,我不敢相信我會問這樣簡單的事情。從對象數組中獲取對象數組的字段值

我使用db->get['table']->result()從表中獲取數據。

表模式如下所示:table(id,col1,col2)。

db->get['table']->result()回報像這樣(的print_r):

Array 
(
[0] => stdClass Object 
    (
     [id] => 1 
     [col1] => "id 1 col 1" 
     [col2] => "id 1 col 2" 
    ) 

[1] => stdClass Object 
    (
     [id] => 2 
     [col1] => "id 2 col 1" 
     [col2] => "id 2 col 2" 
    ) 

[2] => stdClass Object 
    (
     [id] => 3 
     [col1] => "id 3 col 1" 
     [col2] => "id 3 col 2" 
    ) 
} 

現在我需要從行COL2值具有ID = 2,我想這樣做沒有 「foreach」 循環。

我想我能做到這一點是這樣的:

$valueThatINeed = $myArray[2]->col2; 

這是錯誤的,我知道爲什麼它的錯。

問題是 - 如何直接得到我所需要的沒有循環?

回答

0
my_filter($array,$ID) { 
    $col2 = array_values(array_filter($array, function($arrayValue) use($ID) { return $arrayValue[0] == $ID; })); 
    if (count($col2) > 0) { 
     return $col2[0][2]; 
    } else { 
     return false; 
    } 
} 

$col2 = my_filter($arr,2); 
+0

1.您能否更容易理解? 2.我的ID是唯一的,沒有辦法得到多個結果。 3.這是更有效的循環搜索ID? – Kamil

+0

它看起來像在PHP 5中,我不能寫這樣的東西:'函數($ arrayValue)使用($ ID)',或者我不能把函數體放在那裏。 – Kamil

0

嗯,你很可能和array_uintersect與剛剛$ id屬性進行比較的回調函數,但它是一個有點笨拙,大概沒有快過簡單的for循環。

也許我們應該從另一個角度來看待......也許找到正確記錄的最有效方法是在數據庫中觸發SELECT查詢 - 畢竟這正是數據庫優化的目的,尤其是id列將被索引(假設id是主鍵)。

原帖:

我認爲它不只是簡單:

$ valueThatINeed = $ myArray的[2] - > $ COL2;

+0

其不是,因爲這是這樣的: '$ valueThatINeed = $ myArray [array_index] - > otherArray'其中array_index以0開頭且不等於表id。 – Kamil

+0

有一種感覺,它不會;)我會修改我的答案,包括另一個建議。 – xSphere

+0

最初的想法是帶有連接的普通查詢。你可以看到我的嘗試在這裏:http://stackoverflow.com/questions/13054474/codeigniter-get-related-data-rows-as-structures-objects-not-array然後,我試圖在PHP中加入,而不是SQL和在PHP中構建樹,因爲返回的數據不是「客觀」格式,只是記錄。我很擔心那種毀滅表現的重要性。也許我會回到那個查詢並在循環中處理它,並從查詢中構建「樹」... – Kamil