2

私はこれについて何をすべきかについて少し迷っているようです、私はいくつかの情報を解析しようとしていますが、stdClassは常に変化するので、それについて何をすべきかよくわからず、来たるガイダンスを使用できます。

//クエリ

$query = new EntityFieldQuery;
$result = $query
  ->entityCondition('entity_type', 'taxonomy_term')
  ->propertyCondition('name', 'GOOG')
  ->propertyCondition('vid', '3')
  ->execute();

//これは出力です

Array
(
    [taxonomy_term] => Array
        (
            [1868] => stdClass Object
                (
                    [tid] => 1868
                )

        )

)

今、私はを使用してtidに到達することができます

$result['taxonomy_term']['1868']->tid

ただし、前述のように、stdClassは常に変更されます。

4

1 に答える 1

2

次のような再帰配列検索を使用できます。

function array_searchRecursive( $needle, $haystack, $strict=false, $path=array() )
{
    if( !is_array($haystack) ) {
        return false;
    }

    foreach( $haystack as $key => $val ) {
        if( is_array($val) && $subPath = array_searchRecursive($needle, $val, $strict, $path) ) {
            $path = array_merge($path, array($key), $subPath);
            return $path;
        } elseif( (!$strict && $val == $needle) || ($strict && $val === $needle) ) {
            $path[] = $key;
            return $path;
        }
    }
    return false;
}

使用法:

$arr = (array) $yourObject;
$keypath = array_searchRecursive('tid', $arr);

例:

$class = new stdClass;
$class->foo = 'foo';
$class->bar = 'bar';
$arr = (array) $class;
$keypath = array_searchRecursive('foo', $arr);
print_r($keypath);

結果:

Array
(
    [0] => foo
)

では、実際の値を取得するには、次のようにします。

echo $keypath[0]; // foo
于 2012-07-01T19:03:35.323 に答える