2016-08-24 78 views
1

這裏如何串連值是Laravel的fanboys :-)一個laravel收集

我要沿着自己的URL建立請求段的簡單列表小的挑戰。

我開始:

// http://domain/aaa/bbb/ccc/ddd 
$breadcrumbs = collect(explode('/', $request->path())) 

但我不知道該怎麼地圖它集合看起來像:

$breadcrumbs = collect([ 
    ['title' => 'aaa', 'link' => 'http://domain/aaa'], 
    ['title' => 'bbb', 'link' => 'http://domain/aaa/bbb'], 
    ['title' => 'ccc', 'link' => 'http://domain/aaa/bbb/ccc'], 
    ['title' => 'ddd', 'link' => 'http://domain/aaa/bbb/ccc/ddd'], 
]) 

我可以很容易地用for循環做,但我正在尋找一種非常優雅的方式來做到這一點。我用map()each()嘗試沒有成功。

正如Adam Wathan所說:「不要再寫一個循環。」 ;-)

回答

1

有很多方法可以做到這一點,但由於您不可避免地需要了解過去的項目,所以我建議使用reduce()。這裏有一個基本的例子,將告訴你如何建立字符串。你可以很容易地在

Illuminate\Support\Collection {#928 
    #items: array:4 [ 
     0 => "/aaa" 
     1 => "/aaa/bbb" 
     2 => "/aaa/bbb/ccc" 
     3 => "/aaa/bbb/ccc/ddd" 
    ] 
} 

添加鏈接,使進到一個數組等

collect(['aaa', 'bbb', 'ccc', 'ddd']) 
    ->reduce(function ($carry, $item) { 
     return $carry->push($carry->last() . '/' . $item); 
    }, collect([])); 

結果不是說這是通過優化的任何手段,但它確實工作。 :)

+0

這正是我正在尋找的......我忽略了文檔並錯過了'reduce()'方法。 –

+0

很高興你喜歡它。 :) –