dousheng3364 2017-06-06 13:27
浏览 68
已采纳

展平数组会导致最大内存超出错误

I have this snippet that flattens a multi-dimensional array. I want to generate the arrays from the function arguments and use it as my data source. I however runs into Allowed memory size of 134217728 bytes exhausted (tried to allocate 262144 bytes).

If I however passes an array parameter to the function and use it as the data source everything works normal, but I want to gather the inputs from the function arguments.

Here is my code:

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条回答 默认 最新

  • dtqie02844 2017-06-07 03:01
    关注

    Your error message means that you have stackoverflow because infinitive calling of recursion function

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

    Edited function.

    <?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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记