PHP解析json_解码数组

PHP解析json_解码数组,php,multidimensional-array,json,Php,Multidimensional Array,Json,我有一个json_数组-$json_数组,它是多层次的。下面的代码正确地“吐出来”,但是有更好的方法吗?最后,我将得到一个以数组键作为元素名的结构化XML文档,但它们必须与json数组的格式相同: e、 g 其中1是主数组键(实际上是数据库中的id) $json\u array=json\u encode($data); foreach(json_解码($json_数组)为$k=>$val){ foreach($valas$k1=>$v2){ echo$k1; 回声“”; foreach($v2

我有一个json_数组-
$json_数组
,它是多层次的。下面的代码正确地“吐出来”,但是有更好的方法吗?最后,我将得到一个以数组键作为元素名的结构化XML文档,但它们必须与json数组的格式相同:

e、 g

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

$json\u array=json\u encode($data);
foreach(json_解码($json_数组)为$k=>$val){
foreach($valas$k1=>$v2){
echo$k1;
回声“
”; foreach($v2为$k3=>$v3){ echo$k3; 回声“
”; 如果(是_数组($v3)){ foreach($v3为$k4=>$v4){ foreach($v4为$k5=>$v5){ echo$k5; 回声“
”; foreach($v5为$k6=>$v6){ echo$v6; 回音“
” } } } } echo$v3; } 回声“
”; } 回声“
”; } //}OP包含右大括号。
非常欢迎您的想法和想法,谢谢-

编辑

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

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 />';  
}
foreach(json_解码($json_数组)为$k=>$val){
foreach($valas$k1=>$v2){
echo$k1;
回声“
”; foreach($v2为$k3=>$v3){ echo$k3; 回声“
”; 如果(是_数组($v3)){ foreach($v3为$k4=>$v4){ foreach($v4为$k5=>$v5){ echo$k5; 回声“
”; foreach($v5为$k6=>$v6){ echo$v6; 回声“
”; } } } }否则{ echo$v3; } } 回声“
”; } 回声“
”; }
我认为这可能有助于您实现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解码字符串上工作,并且它可以工作。。。如果您有任何问题,请告诉我。

我认为这可能有助于您实现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解码字符串上工作,并且它可以工作。。。如果您有任何问题,请告诉我。

我不明白您的问题是什么?虽然“主代码”很有用,但没有更好/更简洁的编写方法吗?JSON不是XML。它只是一种使用Javascript代码语法表示数据结构的方法。如果要将JSON字符串解码为HTML,则必须自己对数据进行处理。@Russel:使用递归函数。您的代码仅限于6层嵌套深度。为什么在XML文档中使用html换行符?我不明白您的问题是什么?虽然“主代码”可以工作,但没有更好/更简洁的编写方法吗?JSON不是XML。它只是一种使用Javascript代码语法表示数据结构的方法。如果要将JSON字符串解码为HTML,则必须自己对数据进行处理。@Russel:使用递归函数。您的代码嵌套深度仅限于6层为什么要在XML文档中使用html换行符?非常感谢,没有问题,只需快速“strtolower(str_replace(“”,,$key))”键,以防元素名称格式错误(我不会这样做,谢谢并投票支持)Matt-遇到一个小问题/问题-foreach循环中的第一个数字键,即顶级代码-[1]=>stdClass对象(…我不想像在函数中那样被标记为元素。我似乎无法将其分离出来任何建议?原因是我想在第一个“元素”中添加一个属性,但不想在子“元素”中添加属性。您可以这样做:echo recurseJson2XML($json_array[1],true);非常感谢,没有问题只需快速“strtower(str_replace(“”,,$key))“这些键只是为了防止元素名称的格式错误(我不会这样做,谢谢并投票给ty。)Matt-遇到了一个小问题/问题-foreach循环中的第一个数字键,即在最顶层的代码中-[1]=>stdClass对象(…我不想像在函数中那样被标记为元素。我似乎无法将其分离出来任何建议?原因是我想在第一个“元素”中添加属性,但不想在子“元素”中添加属性。您可以这样做:echo recurseJson2XML($json_array[1],true);
<?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;
}
?>