避免初始化变量来存储每个()的返回值

时间:2017-02-13 14:01:34

标签: php laravel each

我有这段代码:

class Menu
{
    public function render()
    {
        $res = '';

        collect($this->items)->each(function ($item) use (&$res) {
            $res .= $item->render();
        });

        return $res;
    }
}

我想返回相同的值但删除$res。有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:0)

您可以使用array_reduce

class Menu
{
    public function render()
    {
        return array_reduce(collect($this->items)->toArray(), function ($res, $item) {
            return $res . $item->render();
        }, '');
    }
}

但效率较低,因为$res的值将被复制而不是通过引用传递。

答案 1 :(得分:0)

解决这个问题:

class Menu
{
    public function render()
    {
        return collect($this->items())->reduce(function ($carry, $item) {
            return $carry . $item->render();
        }, '');
    }
}