0

私が探しているのは、これらから何かを検索してすべてのフィールドを取り戻すための高速な方法です。たとえば、サンプルコード(以下に示す)でfavcolorsの「赤」を検索すると、子供のお気に入りの人の名前が返されます。これは、つまり、この場合、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";
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*(平均プロパティ数) です。単純なキー=>値ではなく配列であるプロパティを検索するように変更する必要があります。反射を使用したい場合があります。

データはどこから来たのですか?私はどちらかというと楽観的ですが、もっと知ればもっと良い方法があると思います。

于 2012-07-25T11:18:36.553 に答える