因為PHP是弱類型語言,常常會發生許多意想不到的問題,是以,我們再次一一細數這些我們踏過的坑!!!
因為PHP是弱類型語言,常常會發生許多意想不到的問題,是以,我們再次一一細數這些我們踏過的坑!!!
1)
foreach中自動回将key為數值的轉化成整型,造成無法比對
function translate($keyword)
{
$trMap = [
'google' => '谷歌',
'360' => '360',
];
foreach ($trMap as $key => $value) {
if (strpos($keyword, $key) !== false) {
return $value;
}
}
return '其他';
}
echo translate("google") . PHP_EOL;
echo translate('360') . PHP_EOL;
結果:
//谷歌
//其他
修複bug:
function translate($keyword)
{
$trMap = [
'google' => '谷歌',
'360' => '360',
];
foreach ($trMap as $key => $value) {
if (strpos($keyword, (string)$key) !== false) {
return $value;
}
}
return '其他';
}
echo translate("google") . PHP_EOL;
echo translate('360') . PHP_EOL;
結果:
//谷歌
//360
建議: 如果确定變量的類型,一定要嚴格轉化之後 ,再進行操作
$arr1 = ['a' => 1, 'b' => 2];
$arr2 = ['b' => 3, 'd' => 4];
// 以 key 的前值為準
var_dump($arr1 + $arr2);
array (
'a' => 1,
'b' => 2, // b 為前值的值
'd' => 4,
)
// 以 key 的後值為準
var_dump(array_merge($arr1, $arr2));
array (
'a' => 1,
'b' => 3, // b 為後值的值
'd' => 4,
)
$arr3 = [1, 2];
$arr4 = [3, 4, 5];
// 可以看到 + 依然會對索引數組的 key 起作用
// 即 $arr3 的 key 0 key 1 會覆寫 $arr4 的 key 0 key 1
// 是以得到的數組隻有 3 個值
var_export($arr3 + $arr4);
array (
0 => 1,
1 => 2,
2 => 5,
)
// array_merge 則會忽略索引素組的下标重複的問題,完全拼接
var_export(array_merge($arr3, $arr4));
array (
0 => 1,
1 => 2,
2 => 3,
3 => 4,
4 => 5,
)