0

我正在寻找的是一种从这些中搜索任何内容并取回所有字段的快速方法,例如,如果我在示例代码(如下所示)中搜索 favcolors 中的“red”,我会得到孩子最喜欢的人的名字color this is,即在这种情况下,返回一个包含 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";
4

1 回答 1

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*(可变属性计数)。您将不得不修改它以搜索不是简单的 key=>value 而是数组的属性。您可能想要使用反射。

数据从何而来?我相当乐观,如果我们知道更多,会有更好的方法来做到这一点。

于 2012-07-25T11:18:36.553 回答