当前位置: 首页 > 面试题库 >

多维数组迭代

公良云
2023-03-14
问题内容

假设您具有以下数组

$nodes = array(
    "parent node",
    "parent node",
    array(
        "child node",
        "child node",
        array(
            "grand child node",
            "grand child node")));

您将如何将其转换为XML字符串,使其看起来像:

<node>
    <node>parent node</node>
    <node>parent node</node>
    <node>
        <node>child node</node>
        <node>child node</node>
        <node>
            <node>grand child node</node>
            <node>grand child node</node>
        </node>
    </node>
</node>

一种方法是通过类似如下的递归方法:

function traverse($nodes)
{
    echo "<node>";

    foreach($nodes as $node)
    {
        if(is_array($node))
        {
            traverse($node);
        }
        else
        {
            echo "<node>$node</node>";
        }
    }

    echo "</node>";
}

traverse($nodes);

我正在寻找一种使用迭代的方法。


问题答案:
<?php

$nodes = array(
    "parent node",
    "parent node",
    array(
        "child node",
        "child node",
        array(
            "grand child node",
            "grand child node"
        )
    )
);

$s = '<node>';
$arr = $nodes;

while(count($arr) > 0)
{
    $n = array_shift($arr);
    if(is_array($n))
    {
        array_unshift($arr, null);
        $arr = array_merge($n, $arr);
        $s .= '<node>';
    }
    elseif(is_null($n))
        $s .= '</node>';
    else
        $s .= '<node>'.$n.'</node>';
}
$s .= '</node>';

echo $s;

?>


 类似资料:
  • 问题内容: 我有, 如图所示这里,我们创建一个从原点的二维之一。但是,如何迭代内部,以便可以在 其中 创建 列索引* 和 行索引 而又不 创建新 索引 呢?我希望将其索引打印到二维数组 (2x5) 时看起来像这样: __ * 我认为这里的主要问题是获取 列索引 和 行索引 而没有创建二维 索引 。是不是 问题答案: 如果要以行为主的顺序,给定row ,column 并且伪造(缺乏更好的术语)带有列

  • MATLAB中的多元数组MATLAB是下标多于两个的数组。可以调用带有两个以上变元的zeros, ones, rand, 或randn函数来产生。例如, R = randn(3,4,5); 生成一个3*4*5的数组,共有3x4x5 = 60个正态分布的随机元素。 三维数组可能表示三维物理数据,譬如房间的温度,取样于一个长方形网格。或者,可表示一个矩阵序列A(k),或依赖时间变化的矩阵A(t)。在

  • 我已经从图像中加载了一个数字高程图图像(一个浮点高度图),我正在数组中的每个2x2平方子矩阵上迭代,并执行计算并对结果求和。 此操作非常慢,因为我正在使用的高程图可能非常大(16Kx16K),而纯 Python 循环方法比 numpy 或 scipy 慢得多(或者我是这么读的)。但是,我找不到有关如何迭代多维 numpy 数组块的任何具体信息。 例如,如果我有以下3x3 Numpy数组(请记住,这

  • 问题内容: 例如: 一个) 与 b) 最初以为我会为了简化而选择a)。 我知道Java不会像C那样在内存中线性存储数组,但是这对我的程序有什么影响? 问题答案: 通常,在搜索答案时,最好的办法是查看如何将选择编译到JVM字节码中: 这被翻译成: 因此,如您所见,JVM已经知道我们在谈论多维数组。 进一步说明: 这被转换为(跳过循环): 因此,如您所见,多维数组在VM内部进行处理,无用指令不会产生开

  • 主要内容:1、二维数组,2、初始化二维数组,3、访问二维数组种的元素C# 中同样支持多维数组(也可称为矩形数组),它可以是二维的,也可以是三维的,多维数组中的数据以类似表格(行、列)的形式存储,因此也被称为矩阵。 要创建多维数组,我们需要在声明数组的方括号内添加逗号,例如: int[,] arr=new int[3,3];         // 声明一个二维数组 int[,,] arr=new int[3,3,3];     // 声明一个三维数组  1、二维数组

  • 除了一维数组和二维数组外, Java 中还支持更多维的数组,如三维数组、四维数组和五维数组等,它们都属于多维数组。经过前面一维,二维的练习后不难发现,想要提高数组的维数,只要在声明数组时将索引与中括号再加一组即可,所以三维数组的声明为 int score[][][],而四维数组为 int score[][][][],以此类推。 通常也将二维数组看作是多维数组。本文以三维数组为例来介绍多维数组。 三