23

我有:

stdClass Object
(
    [0] => stdClass Object
        (
            [one] => aaa
            [two] => sss
        )

    [1] => stdClass Object
        (
            [one] => ddd
            [two] => fff
        )

    [2] => stdClass Object
        (
            [one] => ggg
            [two] => hhh
        )
}

必须用钥匙得到这个,例如:

$var = $stdClass[0]; 

但我有错误:

致命错误:不能使用 stdClass 类型的对象作为数组

是否可以将此 stdClass 解析为数组并将其与键一起使用?

4

11 回答 11

69

将其转换为数组:

$array = (array)$stdClass;
于 2012-07-09T13:31:32.167 回答
36

如果您要json_decode将该 JSON 字符串转换为对象,则可以使用第二个参数json_decode($string, true),该参数会将对象转换为关联数组。

如果没有,其他人都说过的话,只需输入即可

$array = (array) $stdClass;

于 2012-07-09T13:34:44.623 回答
8

自从询问以来,您的问题可能已经解决,但作为参考,谷歌叔叔的快速回答:

function objectToArray($d) {
  if(is_object($d)) {
    $d = get_object_vars($d);
  }
  if(is_array($d)) {
    return array_map(__FUNCTION__, $d); // recursive
  } else {
    return $d;
  }
}

全文在这里。请注意,我与原作者没有任何关联。

于 2013-10-11T07:33:56.097 回答
7

投射它

$array = (array) $stdObject;
于 2012-07-09T13:31:49.493 回答
4

当然,您可以进行类型转换,$var = (array) $obj;但我会建议ArrayAccess您的班级。

通过使用ArrayAccess,您可以将您的对象和数据视为一个数组,或者本机视为一个对象。

于 2012-07-09T15:03:28.757 回答
3

将其转换为数组。目前 PHP 无法将其作为数组读取。

$array = (array)$stdClass;
于 2012-07-09T13:33:15.587 回答
3

本质上,只需键入 cast 即可:

$arr = (array)$obj;
$var = $arr[0];

但请阅读此处的注意事项。

于 2012-07-09T13:34:16.497 回答
2

如果您有一个嵌套数组,您可以使用json_encode并将json_decode整个对象转换为数组:

$result = json_decode(json_encode($source), JSON_OBJECT_AS_ARRAY);
于 2018-08-17T06:50:47.507 回答
1

这个对我有用,解码和编码构成了一个常规数组

$array = json_decode(json_encode($object), True);

于 2017-06-09T09:03:46.117 回答
0
function load_something () : \stdClass {

    $result = new \stdClass();

    $result->varA   = 'this is the value of varA';
    $result->varB   = 'this is the value of varB';
    $result->varC   = 'this is the value of varC';

    return $result;
}

$result = load_something();

echo ($result instanceof stdClass)?'Object is stdClass':'Object is not stdClass';
echo PHP_EOL;

print_r($result);

//directly extract a variable from stdClass 
echo PHP_EOL . 'varA = ' . ($result->varA);

//convert to array, then extract
$array = (array)$result;
echo PHP_EOL . 'varA = ' . $array['varA'];
于 2020-05-02T00:06:39.183 回答
-3

stdClass 是一个对象,因此您可以从中访问值

echo stdClass->one;
于 2012-07-09T13:38:31.627 回答