2017-06-06 53 views
0

我有这样的片段,变平的多维阵列。 我想从函数参数中生成数组并将其用作我的数据源。然而我遇到允许内存大小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]; 


} 

回答

1

你的错误消息,意味着你有因为递归函数

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]])); 

https://3v4l.org/uRUpK

+0

很少有人能真正解决一个代码错误,而无需编写自己的,你是少数人之一。谢谢。 – ultrasamad