1

私はこの関数を持っています。これは、一致するキー=>値のペアを検索するためにオブジェクトの配列を反復処理します。より簡単な(またはより優雅な)方法がないかどうか知りたいです:

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;
}
4

2 に答える 2

2

これはハッシュであるため、$ object配列を反復処理するのではなく、キー/値が存在する/一致するかどうかを簡単にチェックします。

if (array_key_exists($obj_key, $object)) {
    if ($object[$obj_key] == $obj_val) {
       $count++
    }
}
于 2012-07-18T00:58:14.833 に答える
0
if (in_array($obj_key, array_keys($objects, $obj_val))
   $count++;
于 2012-07-18T00:44:11.920 に答える