PHP-计算对象数组中的类属性

PHP-计算对象数组中的类属性,php,arrays,object,foreach,array-filter,Php,Arrays,Object,Foreach,Array Filter,我有一个函数,它遍历一个对象数组来搜索匹配的key=>value对。我很好奇是否有更简单(或更优雅)的方法: 我想下面更接近我想要的。我在一个对象数组中循环,而不是数组数组-下面的函数是否尽可能高效 function count_class_attr($objects, $obj_key, $obj_val) { $count = 0; foreach ($objects as $object ) { if (property_exists($object, $obj_key)) {

我有一个函数,它遍历一个对象数组来搜索匹配的key=>value对。我很好奇是否有更简单(或更优雅)的方法:

我想下面更接近我想要的。我在一个对象数组中循环,而不是数组数组-下面的函数是否尽可能高效

function count_class_attr($objects, $obj_key, $obj_val) {
 $count = 0;
 foreach ($objects as $object ) {
    if (property_exists($object, $obj_key)) {
       if($object->$obj_key == $obj_val) { $count ++; }
    }
 }
 return $count;
}

由于这是一个散列,因此不需要遍历$object数组,只需简单检查键/值是否存在/匹配即可,即:

if (array_key_exists($obj_key, $object)) {
    if ($object[$obj_key] == $obj_val) {
       $count++
    }
}

可以使用。如果对象的构造函数创建了属性_exists(),则可以跳过该属性(这意味着该属性将始终存在)<_array()中的代码>是一个线性搜索,因此这里可能没有性能增益。您已将键和值向后。
if (in_array($obj_key, array_keys($objects, $obj_val))
   $count++;
if (array_key_exists($obj_key, $object)) {
    if ($object[$obj_key] == $obj_val) {
       $count++
    }
}