调用未定义的函数App \ Repositories \ array_build()

时间:2017-10-14 19:50:29

标签: php arrays laravel laravel-5.3

我的一位同事编写了这段代码,为图表构建了一个数组:

$results = array_build(range($days - 1, 0), function ($k, $v) use ($dateFormat) {
            return [Carbon::today()->subDays($v)->format($dateFormat), [
                '0' => 0,
                '1' => 0
            ]];
        });

我刚从Laravel 5.2升级到5.3,现在得到以下异常:

  

调用未定义的函数App \ Repositories \ array_build()

我不确定他的代码是如何工作的(因此我没有找到array_build方法),因此无法恢复工作。

2 个答案:

答案 0 :(得分:1)

array_build() was dropped in version 5.3,这就是您迁移后无法立即使用的原因。

  

array_build()帮助程序也从框架中删除,因为它不再在核心的任何地方使用。

您可以获得from the source函数:

<?php
function array_build($array, Closure $callback)
{
    $results = array();
    foreach ($array as $key => $value)
    {
        list($innerKey, $innerValue) = call_user_func($callback, $key, $value);
        $results[$innerKey] = $innerValue;
    }
    return $results;
}

注意:来源是非正式的,没有提及在official migration doc 中删除该功能

答案 1 :(得分:0)

这是一种辅助方法。 尝试运行

composer dumpautoload

如果没有解决,你可以尝试看看composer.json是否包含自动加载的helper方法的文件,如下所示。辅助文件应包含方法array_build。该文件的名称可能不是helpers.php

"files":["app/helpers.php"].

正如@ishegg所说,它已被删除。所以如果你想让你的代码在这里工作是一种方法。

在项目根目录或某个地方

创建这样的文件

<强> helpers.php

<?php

if ( ! function_exists('array_build'))
{
    /**
     * Build a new array using a callback.
     *
     * @param  array     $array
     * @param  \Closure  $callback
     * @return array
     */
    function array_build($array, Closure $callback)
    {
        $results = array();
        foreach ($array as $key => $value)
        {
            list($innerKey, $innerValue) = call_user_func($callback, $key, $value);
            $results[$innerKey] = $innerValue;
        }
        return $results;
    }
}

并在 composer.json 中自动加载这样的文件

"autoload": {
    "psr-4": {
        .....
    },
    "files": [
        "helpers.php"
    ]
},

运行

composer dumpautoload