<?php
print_r($response->response->docs);
?>
Run Code Online (Sandbox Code Playgroud)
输出以下内容:
Array
(
[0] => Object
(
[_fields:private] => Array
(
[id]=>9093
[name]=>zahir
)
Object
(
[_fields:private] => Array
(
[id]=>9094
[name]=>hussain
)..
)
)
Run Code Online (Sandbox Code Playgroud)
如何将此对象转换为数组?我想输出以下内容:
Array
(
[0]=>
(
[id]=>9093
[name]=>zahir
)
[1]=>
(
[id]=>9094
[name]=>hussain
)...
)
Run Code Online (Sandbox Code Playgroud)
这可能吗?
And*_*y E 383
对于转换单维数组,您可以使用Benoit在其答案中提到的
(array)或者使用.get_object_vars
// Cast to an array
$array = (array) $object;
Run Code Online (Sandbox Code Playgroud)
// get_object_vars
$array = get_object_vars($object);
Run Code Online (Sandbox Code Playgroud)
它们的工作方式略有不同.例如,get_object_vars除非从您传递的对象范围内(即在对象的成员函数中)调用,否则将返回仅具有可公开访问属性的数组. (array)另一方面,将阵列中的所有公共,私人和受保护成员完整地投射到阵列中,当然现在全部公开.
一个有点脏的方法是使用PHP> = 5.2的本机JSON函数来编码为JSON,然后解码回数组.但是,这不包括私有成员和受保护成员,并且不适用于包含无法进行JSON编码的数据的对象(例如二进制数据).
// The second parameter of json_decode forces parsing into an associative array
$array = json_decode(json_encode($object), true);
Run Code Online (Sandbox Code Playgroud)
或者,以下函数将从对象转换为包含私有成员和受保护成员的数组,从此处获取并修改为使用强制转换:
function objectToArray ($object) {
if(!is_object($object) && !is_array($object))
return $object;
return array_map('objectToArray', (array) $object);
}
Run Code Online (Sandbox Code Playgroud)
Ben*_*oit 130
您应该查看get_object_vars,因为您的属性被声明为private,您应该在类中调用它并返回其结果.
要小心,对于像字符串这样的原始数据类型,它会很好用,但我不知道它对嵌套对象的行为方式.
在你的情况下,你必须做一些事情;
<?php
print_r(get_object_vars($response->response->docs));
?>
Run Code Online (Sandbox Code Playgroud)
Muf*_*dal 43
您可以依靠JSON编码/解码函数的行为快速将深层嵌套对象转换为关联数组:
$array = json_decode(json_encode($response->response->docs), true);
Run Code Online (Sandbox Code Playgroud)
Ser*_*gio 33
小心:
$array = (array) $object;
Run Code Online (Sandbox Code Playgroud)
做浅层转换($ object-> innerObject = new stdClass()仍然是一个对象)并使用json进行来回转换,但如果性能是一个问题则不是一个好主意.
如果你需要将所有对象转换为关联数组,这是一个更好的方法(从我不记得的地方撕掉代码):
function toArray($obj)
{
if (is_object($obj)) $obj = (array)$obj;
if (is_array($obj)) {
$new = array();
foreach ($obj as $key => $val) {
$new[$key] = toArray($val);
}
} else {
$new = $obj;
}
return $new;
}
Run Code Online (Sandbox Code Playgroud)
m3n*_*nda 19
$array = json_decode(json_encode($object), true);
Run Code Online (Sandbox Code Playgroud)
我尝试了几种方法来foreach处理对象,这确实是我见过的最简单,最酷的解决方法.只需一行:)
Sty*_*tyx 17
简单版本:
$arrayObject = new ArrayObject($object);
$array = $arrayObject->getArrayCopy();
Run Code Online (Sandbox Code Playgroud)
更新的递归版本:
class RecursiveArrayObject extends ArrayObject
{
function getArrayCopy()
{
$resultArray = parent::getArrayCopy();
foreach($resultArray as $key => $val) {
if (!is_object($val)) {
continue;
}
$o = new RecursiveArrayObject($val);
$resultArray[$key] = $o->getArrayCopy();
}
return $resultArray;
}
}
$arrayObject = new RecursiveArrayObject($object);
$array = $arrayObject->getArrayCopy();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
466035 次 |
| 最近记录: |