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

时间:2012-07-25 11:10:57

标签: php arrays search object

我正在寻找的是一种从这些中搜索任何内容并快速获取所有字段的快速方法,例如,如果我在favcolors中搜索示例代码(如下所示)中的“red”,我会找回该人的姓名这个孩子最喜欢的颜色,即在这种情况下,返回一个包含jhon和homer的数组。如果搜索词是针对年龄= 43岁的人,则返回本垒打,依此类推......:

<?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";

1 个答案:

答案 0 :(得分:3)

这可能是一个起点:

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 *(avarage属性计数)。您将不得不修改它以搜索非简单键=&gt;值但数组的属性。您可能想要使用反射。

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