我有一个JSON解码对象(见图):
我想将整个对象转换为数组(也是子对象)。当我做这样的事情时
$parent_object = (array)$parent_object;
它只转换父对象,子对象仍然是对象。有没有办法一次将所有对象转换为数组,而不是每次都使用(数组)?
答案 0 :(得分:1)
here的解决方案有帮助吗?
function object_to_array($obj) {
if(is_object($obj)) $obj = (array) $obj;
if(is_array($obj)) {
$new = array();
foreach($obj as $key => $val) {
$new[$key] = object_to_array($val);
}
}
else $new = $obj;
return $new;
}
此函数以递归方式创建一个包含除对象
之外的任何内容的新数组答案 1 :(得分:1)
对于一个复杂的对象,当类型转换为(数组)时,我在数组键中得到了空字符,这些字符来源于对象的简化。
当var_dumped
时,(str)数组键看起来像这样:
arrayKey
(str 9个字符,其中隐藏了空字符)实际的字符串:array(NULL CHAR)Key
处理它的最好方法是通过删除空字符(char 0)来进一步清理键。
这种改编有效:
function objectToArray($obj) {
if(is_object($obj)) {
$obj = (array) $obj;
$aobj = array();
foreach ($obj as $key=>$value) {
$aobj[_cleanStr($key)] = $value; //sanitize the str for null chars
}
$obj = $aobj;
}
if(is_array($obj)) {
$new = array();
foreach($obj as $key => $val) {
$new[_cleanStr($key)] = objectToArray($val);
}
}
else $new = $obj;
return $new;
}
//Clean string
function _cleanStr($str) {
$str = str_replace("", "", $str); //remove null chars
return $str;
}
答案 2 :(得分:1)
最好为json_decode()函数设置第二个参数TRUE
(当TRUE
时,返回objects
将转换为关联arrays
。)像这样 -
json_decode($json, TRUE);