iT邦幫忙

0

請問Laravel的框架下用collect()包陣列去用Collection的涵式會很奇怪嗎?

  • 分享至 

  • xImage

請問我的程式碼如下所示,我大量使用collect()這個涵式包住一般的陣列做運算,
前輩覺得我這樣用很奇怪,但我不知道這樣寫對不對,只是覺得那些涵式好好用,
請問正常在Laravel框架下是怎麼運用那些Collection的涵式呢?

foreach ($itemData as $value) {
    $amount[array_keys($value)[0]] = collect($timeData)->where(0, array_keys($value)[0])->count();
    $money[array_keys($value)[0]] = collect($moneyData)->sum(array_keys($value)[0]);
}
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2
mackliu
iT邦新手 4 級 ‧ 2022-11-01 21:58:09
最佳解答

因為不清楚你的資料格式長什麼樣...所以我也只是猜測而已,collections雖然很好用,但如果沒有做適合的安排,反而會讓程式碼變得難以閱讀和維護。。。
比如我看不太懂

collect($timeData)->where(0, array_keys($value)[0])->count();

想做什麼..??為什麼key的參數是0??..如果只是為了取第一個值..那麼使用first()或firstWhere()不就可以了??
或者 array_keys($value)[0]..似乎也可以使用collect($value)->keys()->first()來代替..語意會更清楚....

也許可以進一步的問問前輩覺得奇怪的點在那..趁機從前輩的觀點..看見自己的盲點....
我嘗試小改寫可能會這樣使用:

$amount=[];

collect($itemData)->each(function($item,$idx)use(&$amount){
    $amount[collect($item)->keys()->first()]=collect($item)->count()??? 
    .....
});
shusei iT邦新手 5 級 ‧ 2022-11-02 08:13:55 檢舉

非常感謝,完全了解我的問題在哪了。

1

這樣用的確很奇怪。
因為一般利用 collect 。要簡略 for或是foreach
的連動處理。

使用foreach再搭配collect??
這不是很多此一舉?

shusei iT邦新手 5 級 ‧ 2022-11-02 08:14:42 檢舉

謝謝大神,我的確多此一舉了。

我要發表回答

立即登入回答