Php搜索数组并返回基于ID的记录

时间:2016-03-10 20:05:51

标签: php arrays

我不确定这是否可行。我有一个像:

这样的数组
Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [name] => Honda
        )

    [1] => stdClass Object
        (
            [id] => 2
            [name] => Toyota
        )

    [2] => stdClass Object
        (
            [id] => 3
            [name] => BMW
        )

    [3] => stdClass Object
        (
            [id] => 4
            [name] => Ford
        )

    [4] => stdClass Object
        (
            [id] => 5
            [name] => Benz
        )

    [5] => stdClass Object
        (
            [id] => 6
            [name] => Lexus
        )
)

现在我需要使用1,3,5之类的字符串搜索数组,找到匹配的id(1,3,5)并返回过滤结果,如:

Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [name] => Honda
        )

    [2] => stdClass Object
        (
            [id] => 3
            [name] => BMW
        )

    [4] => stdClass Object
        (
            [id] => 5
            [name] => Benz
        )

)

由于这里没有涉及数据库,我通常会做WHERE id IN(1,2,3),但在这种情况下,这是不可能的。

1 个答案:

答案 0 :(得分:1)

两种快速方式。定义一个id数组:

$ids = [1,3,5];
//or since you said string
$ids = explode(',', '1,3,5');

然后(因为你说"过滤结果")过滤了一个与该数组进行比较的匿名回调:

$result = array_filter($array,
                       function($o) use ($ids) {
                           return in_array($o->id, $ids, true); 
                       });

或者只是循环,比较并创建一个新数组:

foreach($array as $o) {
    if(in_array($o->id, $ids, true)) {
        $result[] = $o;
}

在使用in_array()的两种情况下,我都通过true进行严格比较。不通过这可能会给你带来令人困惑的结果。如果你知道它们不是字符串或两个都是整数,那么删除true参数,因为它会失败。