PHP解析json_decode数组

时间:2011-08-15 15:01:54

标签: php multidimensional-array json

我有一个json_array - $json_array这是多级的,下面的代码正确地“吐出”但是有更好的方法吗?我最终得到的是一个结构化XML文档,其中数组键作为元素名称 - 但它们必须与json数组的格式相同:

e.g。

[1] => stdClass Object ( 
    [content] => stdClass Object ( array ) 
    [general] => stdClass Object ( array ) 
    [costing] => stdClass Object ( array ) 
    [socialbits] => stdClass Object (array ) 
    [options] => stdClass Object ( (array) 
        ( [0] => stdClass Object ( array(array)  ) ) ) )

其中1是主数组键(实际上是数据库中的id)

$json_array = json_encode($data);

foreach(json_decode($json_array) as $k=>$val) {

    foreach($val as $k1=>$v2){

        echo $k1;                
        echo '<br />';            
        foreach($v2 as $k3=>$v3){                
            echo $k3;                
            echo '<br />';                
            if(is_array($v3)){            
                foreach($v3 as $k4=>$v4){            
                    foreach($v4 as $k5=>$v5){                        
                        echo $k5;                            
                        echo '<br />';                                
                        foreach($v5 as $k6=>$v6){                                
                            echo $v6;                                
                            echo '<br />'
                        }           
                    }
                }
            }
            echo $v3;
        }
        echo '<br />';
    }
    echo '<br />';  
}
// } OP included the closing brace.

最受欢迎的想法和想法谢谢 -

修改

我不反对代码编辑,但为了其他人,请确保它们是准确的。这是编辑的更正形式;

foreach(json_decode($json_array) as $k=>$val) {

foreach($val as $k1=>$v2){

    echo $k1;                
    echo '<br />';            
    foreach($v2 as $k3=>$v3){                
        echo $k3;                
        echo '<br />';                
        if(is_array($v3)){            
            foreach($v3 as $k4=>$v4){            
                foreach($v4 as $k5=>$v5){                        
                    echo $k5;                            
                    echo '<br />';                                
                        foreach($v5 as $k6=>$v6){                                
                            echo $v6;                                
                            echo '<br />';
                        }           
                }
            }
        } else {
        echo $v3;
        }
    }
    echo '<br />';
}
echo '<br />';  
}

1 个答案:

答案 0 :(得分:1)

我认为这可以帮助您实现json的xml表示,这是我认为您在阅读问题时所需要的:

<?php
echo recurseJson2XML($json_array, true);
function recurseJson2XML($json, $root = false)
{
    $element = '';
    foreach($json as $key => $value)
    {
        if(is_numeric($key))
        {
            $key = 'element_' . $key;
        }
        $element .= "<{$key}>";
        if(is_array($value) || is_object($value))
        {
            $element .= recurseJson2XML($value);
        }
        else
        {
            $element .= $value;
        }
        $element .= "</{$key}>";
    }
    if($root)
    {
        $element = "<?xml version=\"1.0\" ?><root>{$element}</root>";
    }
    return $element;
}
?>

我测试过以确保它适用于json解码的字符串并且它可以工作......如果您有任何问题,请告诉我。