今天前端回報一個api的型別問題,發現有一個應該要return array的卻return成object了,
只有array型別是associative array的時候才會return成object,也就是一個key對一個value,但是之前寫的程式沒有任何key的設定,最後發現是array_filter的坑。
以下是程式碼:
$ary = [1, 2, 3, 4, 5]; $ary = array_filter($ary, function($v) { return $v != 3; }); echo json_encode($ary);
當$content進入到array_filter之後,array_filter把不符合label的刪除,但同時也會幫你保留keys值的相對位置,進而把你的array變成associative array。
也就是說結果變成:{"0":1,"1":2,"3":4,"4":5} 。
所以這裡我們必須對array_filter產出的結果在處理一次:
$ary = [1, 2, 3, 4, 5]; $ary = array_filter($ary, function($v) { return $v != 3; }); $ary = array_values($ary); echo json_encode($ary);
用array_values重新轉換成sequential array就行了。
結果回到我們預想中的:[1,2,4,5]。
參考資料: