用PHP解析多维数组

用PHP解析多维数组,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,主要目标:以后应将整个数组转换为XML 我想做以下几件事: 对于每个键(例如12772),必须从数据库中获取数据,因此我不能简单地转换它。获取的数据将是标记的属性 我的想法是将最深的child组合成一个xml字符串。但我如何才能发现我是否处于最深的层次?我曾想过一种do…while循环,但我不知道如何准确地检查元素是否有子元素 如您所见,阵列深度可能会有所不同: Array ( [12772]=>Array ( [16563]=>Arr

主要目标:以后应将整个数组转换为XML

我想做以下几件事: 对于每个键(例如12772),必须从数据库中获取数据,因此我不能简单地转换它。获取的数据将是标记的属性

我的想法是将最深的child组合成一个xml字符串。但我如何才能发现我是否处于最深的层次?我曾想过一种do…while循环,但我不知道如何准确地检查元素是否有子元素

如您所见,阵列深度可能会有所不同:

Array
(
    [12772]=>Array
        (
            [16563]=>Array
                (
                    [0] => <xml>Information 1</xml>
                    [1] => <xml>Information 2</xml>
                )
        )

    [16532]=>Array
        (
            [0] => <xml>Information 1</xml>
            [1] => <xml>Information 2</xml>
        )

)
数组
(
[12772]=>阵列
(
[16563]=>阵列
(
[0]=>信息1
[1] =>信息2
)
)
[16532]=>阵列
(
[0]=>信息1
[1] =>信息2
)
)
非常感谢您的帮助

/编辑: 输出应为:

<xml>
<testsuite id='12772' name='fetched from database'>
   <testsuite id='16563' name='fetched from database'>
      <testcase id='0'>Information 1</testcase>
      <testcase id='1'>Information 2</testcase>
   </testsuite>
</testsuite>
<testsuite id='16532' name='fetched from database'>
   <testcase id='0'>Information 1</testcase>
   <testcase id='1'>Information 2</testcase>
</testsuite>

信息1
信息2
信息1
信息2

递归是循环到树状结构中的最佳方法。基本上,递归函数是一个调用自身的函数。举例来说:

$input = Array
(
    12772=>Array
        (
            16563=>Array
                (
                    0 => '<xml>Information 1</xml>',
                    1 => '<xml>Information 2</xml>'
                )
        ),
    16532=>Array
        (
            0 => '<xml>Information 1</xml>',
            1 => '<xml>Information 2</xml>'
        )

);

$xml = "";

recursiveFunction($xml, $input);

var_dump($xml);

function recursiveFunction(&$output, $node, $id = 0, $level = 0)
{

    if (is_array($node)) {

        if ($level === 0) {

             $output .= "<xml>" . PHP_EOL;

         } else {

            $output .= str_repeat("\t", $level) . "<testsuite id='" .  $id . " name='fetched from database'>" . PHP_EOL;
        } 

        foreach ($node as $id => $newNode) {
            recursiveFunction($output, $newNode, $id, $level + 1);
        }

        if ($level === 0) {

             $output .= "</xml>";

         } else {

            $output .= str_repeat("\t", $level) . "</testsuite>" . PHP_EOL;
        } 

    } else {

        $output .= str_repeat("\t", $level) . "<testcase id='" .  $id . "'>" . $node . "</testcase>" . PHP_EOL;
    }
}
$input=Array
(
12772=>数组
(
16563=>数组
(
0=>“信息1”,
1=>“信息2”
)
),
16532=>数组
(
0=>“信息1”,
1=>“信息2”
)
);
$xml=”“;
递归函数($xml,$input);
var_dump($xml);
函数递归函数(&$output,$node,$id=0,$level=0)
{
if(is_数组($node)){
如果($level==0){
$output.=''.PHP\u EOL;
}否则{

$output.=str_repeat(“\t”,$level)。“感谢您的输入。但是我如何知道我在哪个级别/路径?我想将不是数组的$nodes“合并”在一起,但合并的值应该保持在同一级别。例如删除旧值并设置一个新值。我的示例XML可能不是最好的,即“信息1”"应该是一个单独的标记,我希望这些标记在一个数组值中。我更新了我的代码,以便您可以获得级别和路径。现在,我不太确定我是否理解您想要输出内容,是数组还是xml?稍后的输出应该是xml,我已将格式添加到主要问题中!您希望我也执行xml部分,还是希望我给出一个try.我今天要工作,所以不要指望我在接下来的10个小时内帮你。我可以看到解决方案应该是可行的!非常感谢!我明天必须考虑递归函数,因为我很快就要睡觉了。我明天也会尝试实现它。有一个标记太多了,但每次都会出现,所以我可以去掉它(虽然可能有点脏)愿乐队和你在一起!