在PHP中检查数组是否存在具有属性的对象

5

假设我有以下PHP代码:

$a = new a();
$a->id = 1;

我有一个类型为a的对象数组$m(但它们实际上可以是任何类型)。我想检查m中是否有任何一个对象具有属性id等于1。在Java中,我会这样做:

myList
.stream()
.filter(x <- x.id == a.id)
.count();

在PHP中,我尝试了
in_array($a, $m)

但是这似乎没有起作用,因为即使另一个对象具有相同的ID,它仍然是不同的对象。

显然,我可以使用循环,但实际上我想检查数组n中是否有任何对象与m中具有相同ID的对象相对应,所以我宁愿避免嵌套循环。


寻找in_array($a->id, $m)吗? - devpro
这可能会有所帮助:https://dev59.com/2GQm5IYBdhLWcg3w6ShR - tofutim
1个回答

8

PHP也有一个数组过滤函数,由于其显而易见的原因,被称为array_filter(),并且可以使用匿名函数完成您所需的功能。

function findAllWithId($objects, $id) {
    return array_filter($objects, function($toCheck) use ($id) { 
        return $toCheck->id == $id; 
    });
}

1
你应该将 $objects 添加为函数的参数吗? - A.L
@A.L 是的,应该没问题。 - felipsmartins
有两个语法错误,参数中缺少对象和使用($id)。 - fusion3k
1
这就是我在午夜编码的结果:+已修复。 - Erik
我认为如果将$toCheck重命名为$object,会更加清晰明了。此外,在这里似乎不需要使用函数。无论如何,回答得很好。 - felipsmartins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接