关于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
建议: 如果确定变量的类型,一定要严格转化之后 ,再进行操作
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, )
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合终身会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 理解 .NET 结构体字段的内存布局
· .NET 9中的异常处理性能提升分析:为什么过去慢,未来快
· 字符集、编码的前世今生
· Web性能优化:从 2 秒到200毫秒
· WPF 使用GDI+提取图片主色调并生成Mica材质特效背景
· 垃圾qt,毁我青春
· 开发十年现状之我的工作经历
· DeepSeek为什么现在感觉不火了?
· 一种更简单的方式运行 C# 代码,简化 C# 开发体验!
· .NET 9中的异常处理性能提升分析:为什么过去慢,未来快