不使用foreach递归遍历多维数组

8
我有一个像这样的数组,使用foreach循环的代码如下。
$arr = array( array ( array( 'CAR_TIR', 'Tires', 100 ),
           array( 'CAR_OIL', 'Oil', 10 ),
           array( 'CAR_SPK', 'Spark Plugs', 4 )
          ),
       array ( array( 'VAN_TIR', 'Tires', 120 ),
           array( 'VAN_OIL', 'Oil', 12 ),
           array( 'VAN_SPK', 'Spark Plugs', 5 )
          ),
       array ( array( 'TRK_TIR', 'Tires', 150 ),
           array( 'TRK_OIL', 'Oil', 15 ),
           array( 'TRK_SPK', 'Spark Plugs', 6 )
          )
      );


function recarray($array)
{
    foreach($array as $key=>$value)
    {
        if(is_array($value))
        {
            RecArray($value);
        }
        else
        {
            echo "key = $key value = $value";
       }
    }
}
recarray($arr);

我需要使用递归方式遍历数组,而且不能使用foreach。


3
“without using foreach”是什么意思?为什么不使用foreachforeach是友善且温柔的,这让我觉得这可能是一道作业题。如果是,请标记一下。 - DaveRandom
是的,这有点像家庭作业。非常感谢。 - ejaz
此外,如果您不需要从数组的每个位置获取所有值,或者只想从子数组中删除项目,则使用foreach遍历数组并不是一种资源有效的方法。 - andreszs
3个回答

7

简单深度优先搜索:

function DFS($array) {      
    for ($i = 0; $i < count($array); $i ++) {
        if (is_array($array[$i])) {
            DFS($array[$i]);
        }
        else {
            echo "key: ".$i.", value: ".$array[$i]."<br />";
        }
    }
}

3
FYI: for($i = 0; $i < count($array); $i++)... 表示在每次迭代 $array 数组时都会调用一次 count() 函数。 最好改为: $arrayCount = count($array); for($i = 0; $i < $arrayCount; $i++)... 这样做可以避免在每次循环中重复调用 count() 函数,提高代码执行效率。 - macinnir

2

那么 array_walk_recursive() 呢?它可以将函数应用于数组的每个元素:

function test_print($value, $key)
{
    echo "key = $key value = $value";
}

array_walk_recursive($arr, 'test_print');

未经测试


0
我会使用 while 循环 - 就像这样
while($i < count($array)) {}

1
PHP中没有.length属性。 - Teneff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接