首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多维数组展平技术仍会留下空数组

多维数组展平技术仍会留下空数组
EN

Stack Overflow用户
提问于 2020-05-29 22:12:57
回答 1查看 63关注 0票数 1

有许多关于S/O的参考资料显示了扁平化多维递归数组(具有两个以上级别)的各种方法。我已经经历了几十次(并且尝试了最多),但我仍然遇到了一个奇怪的问题,我尝试过的每一个。我得到的结果是:

代码语言:javascript
运行
复制
Array
(
)
Array
(
)
Array
(
)
Array
(
    [0] => 1000043
    [1] => 1000045
    [2] => 1000050
)
Array
(
)
Array
(
)
Array
(
)
Array
(
)
Array
(
    [0] => 1000030
    [1] => 1000032
    [2] => 1000058
    [3] => 1000064
) ...

但我期望的是一个真正扁平化的单一数组:

代码语言:javascript
运行
复制
Array
    [0] => 1000043
    [1] => 1000045
    [2] => 1000050
    [3] => 1000030
    [4] => 1000032
    [5] => 1000058
    [6] => 1000064
)

我在S/O上找到的方法应该处理一个“空数组”(我认为这就是问题所在),但我仍然得到了错误的输出。下面是我的代码:

代码语言:javascript
运行
复制
function array_flatten5(array $array)
{
    $flat = array(); // initialize return array
    $stack = array_values($array); // initialize stack
    while($stack) // process stack until done
    {
        $value = array_shift($stack);
        if (is_array($value)) // a value to further process
        {
            $stack = array_merge(array_values($value), $stack);
        }
        else // a value to take
        {
           $flat[] = $value;
        }
    }
    return $flat;
}

有人能指出我在这里错过了什么吗,因为我认为这是简单的东西,但在这一点上,我的眼睛与我所做的尝试的次数交叉。感谢您能提供的任何帮助。

以下是原始数组。它有4个深度:

代码语言:javascript
运行
复制
Array ( [0] => 1000043 [1] => 1000045 [2] => 1000050 ) Array ( [0] => 1000030 [1] => 1000032 [2] => 1000058 [3] => 1000064 ) Array ( [0] => 1000041 [1] => 1000059 [2] => 1000069 ) Array ( [0] => 1000021 [1] => 1000044 [2] => 1000049 [3] => 1000071 ) Array ( [0] => 1000009 [1] => 1000013 [2] => 1000015 [3] => 1000017 [4] => 1000053 ) Array ( [0] => 1000022 [1] => 1000034 [2] => 1000070 ) Array ( [0] => 1000038 [1] => 1000047 [2] => 1000055 [3] => 1000063 ) Array ( [0] => 1000019 [1] => 1000054 [2] => 1000060 [3] => 1000066 [4] => 1000068 ) Array ( [0] => 1000006 [1] => 1000014 [2] => 1000016 [3] => 1000072 ) Array ( [0] => 1000024 [1] => 1000025 [2] => 1000046 [3] => 1000061 [4] => 1000067 ) Array ( [0] => 1000028 [1] => 1000039 [2] => 1000048 ) Array ( [0] => 1000042 [1] => 1000057 ) Array ( [0] => 1000027 [1] => 1000033 [2] => 1000036 [3] => 1000037 ) Array ( [0] => 1000008 [1] => 1000010 [2] => 1000012 [3] => 1000018 ) Array ( [0] => 1000026 [1] => 1000062 [2] => 1000065 ) Array ( [0] => 1000020 [1] => 1000023 [2] => 1000031 [3] => 1000035 [4] => 1000040 ) Array ( [0] => 1000007 [1] => 1000011 [2] => 1000029 ) Array ( [0] => 1000051 [1] => 1000052 [2] => 1000056 ) Array ( [0] => 1000001 [1] => 1000002 [2] => 1000003 [3] => 1000004 [4] => 1000005 ) Array ( [0] => 1000073 )

这是使用array_walk_recursive建议的结果...

代码语言:javascript
运行
复制
Array
(
)
Array
(
)
Array
(
)
Array
(
)
Array
(
)
Array
(
    [0] => 1000111
    [1] => 1000113
    [2] => 1000129
    [3] => 1000134
)
Array
(
)
Array
(
)
Array
(
    [0] => 1000012
    [1] => 1000085
)
Array
(
) ...
EN

回答 1

Stack Overflow用户

发布于 2020-05-30 16:31:20

您没有准备合适的数组,但是查看这段代码,您可能只需要array_walk_recursive()函数。

代码语言:javascript
运行
复制
$array = [
    [1, 2, 3, 4],
    [[5, 6], [7, 8]],
    [[[9], [10]], [11]]
];

$result = [];
array_walk_recursive($array, function ($tempV) use (&$result) {
    $result[] = $tempV;
});

print_r($result);

输出:

代码语言:javascript
运行
复制
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
    [7] => 8
    [8] => 9
    [9] => 10
    [10] => 11
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62087934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档