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"
    )
}

现在我需要从 id=2 的行中获取 col2 值,我想在没有“foreach”循环的情况下做到这一点。

我以为我可以这样做:

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

这是错误的,我知道为什么它是错误的。

问题是 - 如何在没有循环的情况下直接获得我需要的东西?

4

2 回答 2

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);
于 2012-10-27T07:34:45.540 回答
0

嗯,您可能可以将 array_uintersect 与仅比较 $id 属性的回调函数一起使用,但它有点笨拙,并且可能不比简单的 for 循环快。

也许我们应该从不同的角度来解决这个问题......可能找到正确记录的最有效方法是在数据库中触发 SELECT 查询 - 毕竟这正是数据库优化的目的,尤其是 id 列将是索引(假设 id 是主键)。

原帖:

我认为这不仅仅是简单的:

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

于 2012-10-27T10:10:13.383 回答