PHP遍历数组的所有可能路由

时间:2013-09-10 15:17:05

标签: php recursion associative-array


我有一个相当简单的问题,我希望你可以帮助我:)

我有一个数组:

-transport
--plane
---boeing
---airbus
--car
---audi
---ford

阵列可能有更多不同深度的级别,但我需要从顶层输出每个路径。类似的东西:

transport->plane->boeing
transport->plane->airbus
transport->car->audi
transport->car->ford

任何人都有任何建议如何处理这个问题?
很多问候 安德烈亚斯

4 个答案:

答案 0 :(得分:0)

您需要运行递归数组walker。

function walk_array($array) {
   foreach ($array as &$item) {
     if (is_array($item)) {
       walk_array($item);
     } else {
       echo $item;
     }
   }
}

walk_array($somearray);

问题是,您需要从自身重用相同的功能。但是你应该发布更多关于你的代码的内容,因为通常你应该更好地控制你的数据结构。

答案 1 :(得分:0)

 <?php

function show($arr, $prefix = '')
{
    if (!is_array($arr))
    {
        if ($prefix)
        {
            echo $prefix . '->'. $arr, "\n";
        }
        else
        {
            echo $arr, "\n";
        }
    }
    else
    {
        foreach ($arr as $key => $val)
        {
            $pre = $prefix;

            if (is_array($val))
            {
                if ($pre)
                {
                    $pre = $pre . '->' . $key;
                }
                else
                {
                    $pre = $key;
                }
                show($val, $pre);
            }
            else
            {
                show($val, $pre);
            }
        }
    }
}

$list = array(
    'transport' => array(
        'plane' => array(
            'boeing',
            'airbus',
        ),
        'car' => array(
            'audi',
            'ford'
        ),
    ),
);

show($list);

输出:

transport->plane->boeing
transport->plane->airbus
transport->car->audi
transport->car->ford

答案 2 :(得分:0)

  

如何处理此问题的任何建议?

array_walk_recursive()

相应地设置user_data()以记住父元素。

注意:我故意不提供示例代码,以便教你钓鱼。这是学会查看手册和be a better PHP Developer

答案 3 :(得分:0)

<?php
    $arrTrans = array(
        'plane' => array('boeing', 'airbus'),
        'car' => array('audi', 'ford')
    );
    $strTree = '';
    foreach($arrTrans as $strKey => $arrMode) {
        $strTree .= $strKey;
        foreach($arrMode as $intKey => $strVal)
            $strTree .= ' ' . $strVal;    
        $strTree .= PHP_EOL;
    }
    print $strTree;
?>

那应该给出一些想法

相关问题