这是一个非常愚蠢的问题,我无法相信我会问这样简单的事情。
我正在使用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"
)
}
现在我需要从id = 2的行获取col2值,我想在没有“foreach”循环的情况下进行。
我以为我可以这样做:
$valueThatINeed = $myArray[2]->col2;
这是错的,我知道为什么错。
问题是 - 如何在没有循环的情况下直接得到我需要的东西?
答案 0 :(得分: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);
答案 1 :(得分:0)
嗯,你可以使用array_uintersect和一个只比较$ id属性的回调函数,但它有点笨拙,并且可能不比简单的for循环快。
也许我们应该从不同的角度来看待...可能找到正确记录的最有效方法是在数据库中激活SELECT查询 - 毕竟这正是为数据库优化的,特别是作为id列将被索引(假设id是主键)。
原帖:
我认为这不仅仅是:
$ valueThatINeed = $ myArray [2] - > $ col2;