全職寫程式10年了
越來越覺得 程式設計就是三件事
type、abstraction、認知負擔管理
展開來講有點說不完 有空再談
稍微學過 functional programming 之後
會對 type 變敏感 有藝術、工藝上的要求
舉個例 我最近踩到一個 php/laravel bug
$data = collect([
[
'name' => 'Location A',
],
[
'name' => 'Location B',
],
[
'name' => 'Location C',
],
]);
$data = $data->filter(function ($item) {
return $item['name'] !== 'Location B';
});
return response()->json([
'success' => true,
'data' => $data
]);
瀏覽器會拿到
{"success":true,"data":{"0":{"name":"Location A"},"2":{"name":"Location C"}}}
如果這樣
$data = collect([
[
'name' => 'Location A',
],
[
'name' => 'Location B',
],
[
'name' => 'Location C',
],
]);
$data = $data->filter(function ($item) {
return $item['name'] !== 'Location B';
})->values();
return response()->json([
'success' => true,
'data' => $data
]);
瀏覽器會拿到
{"success":true,"data":[{"name":"Location A"},{"name":"Location C"}]}
前者很出乎意料 前端一定會爛掉 後者才是想像中的資料格式
這問題很雞掰 php 用久 難免會踩到
追根究底 在於 php 關聯式陣列 與 普通陣列 都是陣列
json_encode 會轉成物件還是陣列 要看索引是否連續 所以 type 不保證
workaround 就是用 laravel collection 加上 values()
幹勒 真的是有夠垃圾的