在Laravel collection sortBy之後發現原本的array格式在資料回傳後居然變成json格式,以下依序描述問題與解法:
有一包data如下:
$data = collect($data);
現在sortBy show_order欄位後,結果如下:
$data = collect($data)->sortBy('show_order');
看似有照想要的結果排序,但是當把data return的時候,資料卻變成這樣:
然後前端就exception了!
為什麼array會變成這種奇怪的資料結構呢? 主要是sortBy之後index順序變了,這時候資料並不是一個有效的indexed array,因此被當作是associative array,就會轉換成json object結構了。
解決方法:
在sortBy之後加上->values(),來把array做reindex:
$data = collect($data)->sortBy('show_order')->values();
如此回傳後就會視為indexed array了。