通过递归调用展开数组

2018-05-23 12:23 By "Powerless" 3565 2 1

写一个函数,输入为一个嵌套数组,返回其平面形式,如:
输入:[1, [2, 3], [4, [5, 6]], [[[7]]]]
输出:[1, 2, 3, 4, 5, 6, 7]
不可以依赖全局变量,静态变量。

function flat($array)
{
    $room = &$array[key($array)];
    if (!is_array($room)) {
        $room = [$room];
    }
    next($array);
    while (list($k, $v) = each($array)) {
        if(is_array($v)){
            if(count($v) == count($v,1)){
                $v = array_values($v);
            }else{
                $v = flat($v);
            }
        }
        $room = array_merge_recursive($room, $v);
        unset($array[$k]);
    }
    return $room;
}
$array = [
    1,
    [2, 3],
    [4, [5, 6]],
    [[[7]]]
];
print_r(flat($array));

注意each函数在PHP7.2开始被拒绝了。

评 论

7 2018-06-25 16:54

希望博主多多更新算法,共勉!

Powerless 8 2018-06-25 17:10
回复 : 嗯嗯。。好的。。。也是业余有时间弄弄。。有时候工作已忙起来就顾不上了。。

View in WeChat

Others Discussion

  • 2016年云计算热词
    Posted on 2019-06-12 17:53
  • PHP没你想的那么差
    Posted on 2021-12-17 15:40
  • Mysql联合索引的最左前缀匹配原则
    Posted on 2018-08-25 15:00
  • 巧用CAS解决数据一致性问题
    Posted on 2019-03-07 11:55
  • 分布式架构之「 数据分布」
    Posted on 2019-11-14 10:00
  • PHP扩展ImageMagick安装
    Posted on 2022-11-11 11:16
  • 通过信鸽来解释HTTPS
    Posted on 2018-10-22 13:56
  • HTTP和HTTPS的区别
    Posted on 2020-08-10 23:00