2017-06-06 20 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