我不确定这是否可行。我有一个像:
这样的数组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),但在这种情况下,这是不可能的。
答案 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
参数,因为它会失败。