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

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


}

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