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

2018-01-18 18:59:32 +08:00
 Bule

数组:

$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',
    ...
);
2451 次点击
所在节点    PHP
11 条回复
loginv2
2018-01-18 19:14:05 +08:00
递归遍历?
loadinger
2018-01-18 19:28:41 +08:00
递归不就可以么。
gclove
2018-01-18 19:32:24 +08:00
@Bule 简单, 先判断遍历的结果是不是一个数组,是的话调用自己。 否则输出 /保存
Bule
2018-01-19 11:25:37 +08:00
@gclove 想不通额,请问有 demo 示例吗?
eoo
2018-01-19 11:32:07 +08:00
<?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
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
2018-01-19 11:58:29 +08:00
顺路打听一下怎么发代码块呢?
Bule
2018-01-19 12:06:26 +08:00
@vincenttone
```语言( php )
code
```
Bule
2018-01-19 12:09:59 +08:00
@vincenttone 好 6 啊,这方面的知识是多看看数据结构吗?
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
2018-01-19 14:25:35 +08:00
@Bule 我写的方法是一个递归,如果要和数据结构说到一起的话,写过一些树形结构的话,会有一些影响吧。
但是其实递归也算是一种常用的编程套路,很多时候比循环实现更容易一些吧,所以实践中经常会用到,多写代码也就好了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/424016

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX