之前因為 array_merge() 花了很久的時間 debug,這次發現其實不只 array_merge() 會需要注意資料型態的問題,其他 statement 也要注意。
這次遇到是因為使用 time 當作 array 的 key 時發現的:
$timeTable = [];
$timeTable['0800'] = '早上';
$timeTable['1200'] = '中午';
$timeTable['2000'] = '晚上';
取直時發現資料型態和 assign 時不一樣,可以被轉成數字的全部變成數字了:
array(3) {
["0800"]=>
string(6) "早上"
[1200]=>
string(6) "中午"
[2000]=>
string(6) "晚上"
}
原因是 PHP array 的預設行為,是會自動對 key 作 type casting。可被判斷成數值的 (is_numeric()) 都會自動被轉為 int。所以撰寫時要注意,如果 array 的 key 若需要避免被 casting 時,必須手動加上一些字元讓 is_numeric() 無法將其判斷為數字。
以上面的例子,可以將時間加上「:」
- 08:00
- 12:00
- 20:00
Ref: