PHP:在包含对象的数组中搜索一个值


PHP: search for a value in an array which contains objects

我想要的是一种快速的方法,可以从中搜索任何内容并返回所有字段,例如,如果我在示例代码(下面给出)中搜索favorcolors中的"red",我会返回孩子最喜欢的颜色的人的名字,即在这种情况下,返回一个包含jhon和homer的数组。如果搜索词是针对年龄=43岁的人,那么返回homer,依此类推…:

<?php
class person {
public $name;
public $kidsfavcolors=array();
public $age;
}
$people['jhon'] = new person;
$people['jhon']->name = "jhon";
$people['jhon']->age = 30;
$people['jhon']->kidsfavcolors['katherine']= "red";
$people['jhon']->kidsfavcolors['jimmy']= "yellow";
$people['homer'] = new person;
$people['homer']->name = "homer";
$people['homer']->age = 43;
$people['homer']->kidsfavcolors['bart']= "black";
$people['homer']->kidsfavcolors['lisa']= "red";

这可能是一个起点:

function search_objects($objects, $key, $value) { // might contain bugs as I typed in in SO on the go
    $return = array();
    foreach ($objects as $object) {
        $objVars = get_object_vars($object);
        if (isset($objVars[$key]) && $objVars[$key] == $value) {
           $return[] = $object;
        }
    }
    return $return;
}
print_r(search_object($people, 'name', 'john'));

如果没有某种索引,它将不会比对象的线性行走快得多。此搜索的复杂性为n*(可用属性计数)。您必须修改它才能在不是简单键=>值而是数组的属性中进行搜索。您可能需要使用反射。

数据来自哪里?我相当乐观,如果我们知道更多,有更好的方法可以做到这一点。