我有这个片段可以展平多维数组。 我想从函数参数生成数组并将其用作我的数据源。但是我遇到允许的内存大小为134217728字节耗尽(试图分配262144字节)。
但是,如果我将数组参数传递给函数并将其用作数据源,则一切正常,但我想从函数参数中收集输入。
这是我的代码:
public function flatten()
{
$data = func_get_args();
return is_array($data) ? array_reduce($data, function($c, $a){
return array_merge($c, $this->flatten($a));
}, []) : [$data];
}
答案 0 :(得分:1)
您的错误消息表示您有stackoverflow,因为不断调用递归函数
public function flatten()
{
$data = func_get_args();
// $data is always array after this
return is_array($data) ? array_reduce($data, function($c, $a){
// so, you need to move this condition inside anonymous function
return array_merge($c, $this->flatten($a));
// there is you are calling function with the same argument, you need to use variadic
}, []) : [$data];
}
编辑功能。
<?php
class Foo {
public function flatten()
{
$data = func_get_args();
return array_reduce($data, function($c, $a){
return array_merge($c, is_array($a) ?$this->flatten(...$a) : [$a]);
}, []) ;
}
}
var_dump((new Foo())->flatten(1));
var_dump((new Foo())->flatten());
var_dump((new Foo())->flatten(1, [2], [3, [4,5]]));