在Laravel collection sortBy之後發現原本的array格式在資料回傳後居然變成json格式,以下依序描述問題與解法:
有一包data如下:
$data = collect($data);

$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了。

本筆記參考:
1. https://stackoverflow.com/questions/30717773/laravel-sorted-collection-output-is-not-an-array











