如何在laravel-5.6中使用call_user_func_array()函数?

时间:2019-05-02 13:47:16

标签: php laravel

我正在使用github repo(https://gist.github.com/mcaskill/baaee44487653e1afc0d#file-function-array-group-by-php)代码,并且在laravel中使用了该repo代码,但出现错误

错误:

  

ErrorException(E_WARNING)   call_user_func_array()期望参数1为有效的回调,找不到函数'array_group_by'或无效的函数名称

代码:

foreach ($grouped as $key => $value) {
    $params = array_merge([ $value ], array_slice($args, 2, func_num_args()));
    $grouped[$key] = call_user_func_array("array_group_by", $params);
}

在我不知道如何在Laravel中使用此功能之前,我还没有使用过call_user_func_array,但我也尝试过$this->array_group_by,但是随后出现错误:

  

函数App \ Http \ Controllers \ abcController :: array_group_by()的参数太少,传入了1个。

1 个答案:

答案 0 :(得分:0)

在调用array_group_by()函数之前,请在代码上方添加以下函数,或在代码中使用此文件

function array_group_by(array $array, $key)
{
    if (!is_string($key) && !is_int($key) && !is_float($key) && !is_callable($key) ) {
        trigger_error('array_group_by(): The key should be a string, an integer, or a callback', E_USER_ERROR);
        return null;
    }
    $func = (!is_string($key) && is_callable($key) ? $key : null);
    $_key = $key;
    // Load the new array, splitting by the target key
    $grouped = [];
    foreach ($array as $value) {
        $key = null;
        if (is_callable($func)) {
            $key = call_user_func($func, $value);
        } elseif (is_object($value) && property_exists($value, $_key)) {
            $key = $value->{$_key};
        } elseif (isset($value[$_key])) {
            $key = $value[$_key];
        }
        if ($key === null) {
            continue;
        }
        $grouped[$key][] = $value;
    }
    // Recursively build a nested grouping if more parameters are supplied
    // Each grouped array value is grouped according to the next sequential key
    if (func_num_args() > 2) {
        $args = func_get_args();
        foreach ($grouped as $key => $value) {
            $params = array_merge([ $value ], array_slice($args, 2, func_num_args()));
            $grouped[$key] = call_user_func_array('array_group_by', $params);
        }
    }
    return $grouped;
}