【问题标题】:Traverse multi dimensional array recursively without using foreach不使用foreach递归遍历多维数组
【发布时间】:2012-07-17 07:45:45
【问题描述】:

我有一个这样的数组和使用 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 来遍历数组。

【问题讨论】:

  • without using foreach - 为什么? foreach 是一个善良温柔的情人……这对我来说是家庭作业的味道,如果是,请标记它。
  • 是的,它是一种家庭作业。非常感谢
  • 此外,当您并不真正需要从数组的每个位置获取所有值,或者您只想从子数组中删除项目时,使用 foreach 遍历数组并不节省资源。

标签: php recursion multidimensional-array


【解决方案1】:

array_walk_recursive() 呢?它可以对数组的每个元素应用函数:

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

array_walk_recursive($arr, 'test_print');

未测试

【讨论】:

    【解决方案2】:

    我会使用一个while循环——比如

    while($i < count($array)) {}
    

    【讨论】:

    • php 中没有.length 属性
    【解决方案3】:

    简单的深度优先搜索:

    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 />";
            }
        }
    }
    

    【讨论】:

    • 仅供参考:for($i = 0; $i
    猜你喜欢
    • 2021-01-18
    • 1970-01-01
    • 2016-04-06
    • 2020-06-02
    • 2013-03-26
    • 1970-01-01
    • 2010-10-24
    • 2016-06-05
    相关资源
    最近更新 更多