V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Bule
V2EX  ›  PHP

PHP 无规则数组如何迭代拼接到想要的效果呢?

  •  
  •   Bule · 2018-01-18 18:59:32 +08:00 · 2657 次点击
    这是一个创建于 2536 天前的主题,其中的信息可能已经有所发展或是发生改变。

    数组:

    $init = [
        'router/aaa' => [
            'opear' => ['1.php', '2.php'],
            'list' => ['1.php', '2.php']
        ],
        'router/bbb' => [
            'url' => ['a.php', 'b.php']
        ],
        'router/home/help' => [
            'opear' => [
                'update' => ['1.php', '2.php'],
                'delete' => ['1.php', '2.php']
            ],
            'status' => ['start.php', 'stop.php']
        ]
    ];
    

    效果:

    array(
        0 => 'router/aaa/opear/1.php',
        1 => 'router/aaa/opear/2.php',
        2 => 'router/aaa/list/1.php',
        3 => 'router/aaa/list/2.php',
        4 => 'router/bbb/url/a.php',
        5 => 'router/bbb/url/b.php',
        6 => 'router/home/help/opear/update/1.php',
        7 => 'router/home/help/opear/update/2.php',
        ...
    );
    
    11 条回复    2018-01-19 14:25:35 +08:00
    loginv2
        1
    loginv2  
       2018-01-18 19:14:05 +08:00 via Android
    递归遍历?
    loadinger
        2
    loadinger  
       2018-01-18 19:28:41 +08:00
    递归不就可以么。
    gclove
        3
    gclove  
       2018-01-18 19:32:24 +08:00
    @Bule 简单, 先判断遍历的结果是不是一个数组,是的话调用自己。 否则输出 /保存
    Bule
        4
    Bule  
    OP
       2018-01-19 11:25:37 +08:00
    @gclove 想不通额,请问有 demo 示例吗?
    eoo
        5
    eoo  
       2018-01-19 11:32:07 +08:00 via Android
    <?php
    //无限遍历数组
    $a1 = array("a", "b", "c"); //一维数组
    $a2 = array(array(21, 3, 6), array("a", "b", "c")); //二维数组
    $a3 = array(array(array(5, 55), 4, 444), 2, 7, 6, 8, array("w", "d", array(3, 2, "a"), "s")); //多维不规则数组
    function fun($a) {
    foreach ($a as $val) {
    if (is_array($val)) { //如果键值是数组,则进行函数递归调用
    fun($val);
    } else { // 如果键值是数值,则进行输出
    echo "$val<br />";
    } //end if

    } //end foreach

    } //end fun
    //fun($a1);
    //fun($a2);
    fun($a3);
    ?>
    vincenttone
        6
    vincenttone  
       2018-01-19 11:56:40 +08:00
    试试这个
    ```
    function r($arr, $pre = '')
    {
    $r = [];
    foreach ($arr as $_k => $_v) {
    if (is_array($_v) && !empty($_v)) {
    $r = array_merge($r, r($_v, $pre . '/' . $_k));
    } else {
    $r[] = $pre . '/' . $_v;
    }
    }
    return $r;
    }
    ```
    vincenttone
        7
    vincenttone  
       2018-01-19 11:58:29 +08:00
    顺路打听一下怎么发代码块呢?
    Bule
        8
    Bule  
    OP
       2018-01-19 12:06:26 +08:00
    @vincenttone
    ```语言( php )
    code
    ```
    Bule
        9
    Bule  
    OP
       2018-01-19 12:09:59 +08:00
    @vincenttone 好 6 啊,这方面的知识是多看看数据结构吗?
    dee
        10
    dee  
       2018-01-19 14:16:16 +08:00
    也贴一个 虽然不是迭代
    ```php
    function router($ary, &$newAry, $pre = '')
    {
    foreach($ary as $key => $val)
    {
    if(is_array($val))
    {
    router($val, $newAry, "$pre/$key");
    }
    else
    {
    $newAry[] = "{$pre}/{$val}";
    }
    }
    }
    ```
    vincenttone
        11
    vincenttone  
       2018-01-19 14:25:35 +08:00
    @Bule 我写的方法是一个递归,如果要和数据结构说到一起的话,写过一些树形结构的话,会有一些影响吧。
    但是其实递归也算是一种常用的编程套路,很多时候比循环实现更容易一些吧,所以实践中经常会用到,多写代码也就好了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2720 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 09:28 · PVG 17:28 · LAX 01:28 · JFK 04:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.