2012-07-18 48 views
1

我有这个函数,它在搜索匹配键=>值对中遍历一个对象数组。我很好奇,如果没有更容易(或更优雅)的方式:PHP - 计数对象数组中的类属性

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

我觉得下面更接近我所寻找的。我正在循环一个对象数组,而不是数组数组 - 下面的函数会尽可能高效吗?

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; 
} 
+0

你可以使用['array_walk'](http://us2.php.net/manual/en/function.array-walk.php)。 – 2012-07-18 00:39:52

+0

深度总是2? – 2012-07-18 00:53:19

+0

是的,深度总是两个 – 2012-07-18 15:08:57

回答

2

,而不是通过$对象数组迭代,因为这是一个哈希值,如果键/值存在一个简单的检查/比赛应该工作,即:

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

谢谢,这有帮助! – 2012-07-18 15:10:08

+0

谢谢Ernie你我帮你解决了这个问题! – 2012-07-19 02:08:52

0
if (in_array($obj_key, array_keys($objects, $obj_val)) 
    $count++; 
+1

'in_array()'是一个线性搜索,所以这里可能没有性能增益。 – nickb 2012-07-18 00:50:49

+0

你已经获得了键和值。 。 。 – ernie 2012-07-18 00:56:19