PHP解析json_解码数组
我有一个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_数组
,它是多层次的。下面的代码正确地“吐出来”,但是有更好的方法吗?最后,我将得到一个以数组键作为元素名的结构化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;
}
?>