解析随机stdClass

时间:2012-07-01 18:59:04

标签: php

我似乎对此有什么不知所措,我试图解析一些信息但是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
                )

        )

)

现在我可以使用

来达到这个目标
$result['taxonomy_term']['1868']->tid

但如前所述,stdClass将始终在变化。

1 个答案:

答案 0 :(得分:2)

你可以像这样使用recurssive数组搜索:

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