首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >stdClass对象问题

stdClass对象问题
EN

Stack Overflow用户
提问于 2009-10-14 17:10:11
回答 6查看 20.5K关注 0票数 5

我很难用PHP解析下面的数据。API会返回它,我尝试过各种语法。如何以非对象的方式返回数据?或者,使用stdClass调用数据的语法是什么?

我可以将其转换为一个基于数据的数组,甚至是两个吗?当涉及到基于对象的数据集时,我就迷失了方向。

代码语言:javascript
复制
stdClass Object
(
    [0] => stdClass Object
        (
            [district] => stdClass Object
                (
                    [state] => NY
                    [number] => 29
                )

        )

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

        )

)

当我自己创建对象,然后执行var_dump时,我会得到这样的结果:

代码语言:javascript
复制
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"
    }
  }
}
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-10-14 17:42:41

它们可能在代码($object = (object) $array)中将数组转换为对象。这样做的优点是从现在开始它将通过引用传递(这是对象的默认设置),缺点是该对象完全无用(成员不能以数字开头-请参见regex in PHP's docs),直到您将其转换回来(PHP确实允许一些非常神秘的事情):

代码语言:javascript
复制
$array = (array) $bogusObject;
$array[0]->district->state === 'NY';
票数 14
EN

Stack Overflow用户

发布于 2009-10-14 17:57:35

使用:

代码语言:javascript
复制
$object->{'0'}->district->state

基本上,将字符串赋给一个变量,然后将该变量用作对象访问器,这是一种捷径。

代码语言:javascript
复制
$zero = "0";
$object->$zero; /* or */ $object->{$zero};
票数 10
EN

Stack Overflow用户

发布于 2009-10-14 17:46:05

我现在正在看他们的代码,不幸的是,他们没有在他们的类中公开选项,让您以关联数组树而不是stdClass对象树的形式请求数据。

“问题”在class.sunlightlabs.php的第96行

代码语言:javascript
复制
return json_decode( $data );

你有几个选择。

  1. 只需使用stdClass将返回的stdClass树转换成一个

的关联数组即可

#1在行动中

代码语言:javascript
复制
// echo the state of the 2nd object in the result
echo $result->{0}->district->state;

#2在行动中

代码语言:javascript
复制
$result = toArray( $result );

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

你也可以通过一些创造性的模式应用来直接使用他们的类,但是他们已经大量使用了子类,这使得它变得相当复杂,所以我坚持使用这两种解决方案中的一种。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1567698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档