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

うーん、おそらく $id プロパティだけを比較するコールバック関数で array_uintersect を使用できますが、それは少しぎこちなく、おそらく単純な for ループよりも高速ではありません。

おそらく、別の角度からこれに取り組む必要があります...おそらく、適切なレコードを見つける最も効率的な方法は、データベースで SELECT クエリを実行することです。インデックス付き (id が主キーであると仮定)。

元の投稿:

次のように単純ではないと思います。

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

于 2012-10-27T10:10:13.383 に答える