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

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

报告相同问题?

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度