2012-10-27 195 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