stdClass对象解决问题(stdClass Object problems)

2019-08-18 02:22发布

我挣扎解析使用PHP下面的数据。 一个API返回它,我已经试过各种语法。 如何在一个非对象的方式返回的数据? 或者说,有什么语法来调用使用stdClass的数据?

难道我将它转换为一个基于数据阵列,或者甚至是两个? 当涉及到基于对象的数据集,我迷路了。

stdClass Object
(
    [0] => stdClass Object
        (
            [district] => stdClass Object
                (
                    [state] => NY
                    [number] => 29
                )

        )

    [1] => stdClass Object
        (
            [district] => stdClass Object
                (
                    [state] => NY
                    [number] => 26
                )

        )

)

当我创建我自己的对象,然后做的var_dump,我得到这样的:

object(stdClass)#8 (2) {
  [0]=>
  object(stdClass)#4 (1) {
    ["district"]=>
    object(stdClass)#5 (2) {
      ["state"]=>
      string(2) "NY"
      ["number"]=>
      string(2) "29"
    }
  }
  [1]=>
  object(stdClass)#6 (1) {
    ["district"]=>
    object(stdClass)#7 (2) {
      ["state"]=>
      string(2) "NY"
      ["number"]=>
      string(2) "26"
    }
  }
}

Answer 1:

他们很可能铸造数组对象在他们的代码( $object = (object) $array )。 这具有将参照从现在开始传递的优点(如与对象的默认)和缺点的对象是完全无用的(成员不能以数字开头-看到在PHP的文档正则表达式 ),直到你将它转换回(PHP确实允许一些很神秘的东西):

$array = (array) $bogusObject;
$array[0]->district->state === 'NY';


Answer 2:

使用:

$object->{'0'}->district->state

基本上你的短切分配一个字符串变量,然后使用该变量作为对象访问。

$zero = "0";
$object->$zero; /* or */ $object->{$zero};


Answer 3:

现在我在看他们的代码,不幸的是,他们还没有曝光的选项,其类,以请求数据作为关联数组树VS一个stdClass的对象树。

“问题”是在class.sunlightlabs.php线96

return json_decode( $data );

你有几个选项。

  1. 只需使用stdClass的语法。
  2. 转换返回stdClass的树成一个关联数组一个

#1在行动

// echo the state of the 2nd object in the result
echo $result->{0}->district->state;

#2在行动

$result = toArray( $result );

function toArray( $data )
{
  if ( is_object( $data ) )
  {
    $data = get_object_vars( $data );
  }
  return is_array($data) ? array_map(__FUNCTION__, $data) : $data;
}

你可以用自己的类直接通过模式的一些有创意的应用也行,但他们却大量使用sublcasses已经变得复杂也相当多,所以我会坚持这两个解决方案之一。



Answer 4:

你可以通过这样的对象迭代:

foreach ($obj as $each) {
    echo $each->district->state . ' - ' . $each->district->number . '<br />';
}


Answer 5:

用户“空”的意见提出这一点,但希望把它放在这里,所以它不是错过了伊斯利。

最好的选择是通过TRUE如json_decode即json_decode第二PARAM这使得它返回替代类关联数组($数据,TRUE)。 所以,如果你有机会获得源代码 - 做出的改变。



Answer 6:

这从soulmerge解决方案只是工作对我罚款:

$array = (array) $bogusObject;
$array[0]->district->state === 'NY';

非常感谢!!



文章来源: stdClass Object problems