因为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
建议: 如果确定变量的类型,一定要严格转化之后 ,再进行操作
2)注意array_merge 与 + 的区别使用
$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, )