关于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
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从零实现富文本编辑器#3-基于Delta的线性数据结构模型
· 记一次 .NET某旅行社酒店管理系统 卡死分析
· 长文讲解 MCP 和案例实战
· Hangfire Redis 实现秒级定时任务,使用 CQRS 实现动态执行代码
· Android编译时动态插入代码原理与实践
· 使用TypeScript开发微信小程序(云开发)-入门篇
· 没几个人需要了解的JDK知识,我却花了3天时间研究
· C#高性能开发之类型系统:从 C# 7.0 到 C# 14 的类型系统演进全景
· 管理100个小程序-很难吗
· 在SqlSugar的开发框架中增加对低代码EAV模型(实体-属性-值)的WebAPI实现支持