因为PHP是弱类型语言,常常会发生许多意想不到的问题,所以,我们再次一一细数这些我们踏过的坑!!!

1)

foreach中自动回将key为数值的转化成整型,造成无法匹配

function translate($keyword)
{
$trMap = [
'google' => '谷歌',
'' => '',
];
foreach ($trMap as $key => $value) {
if (strpos($keyword, $key) !== false) {
return $value;
}
} return '其他';
} echo translate("google") . PHP_EOL;
echo translate('') . PHP_EOL; 结果:
//谷歌
//其他

修复bug:

function translate($keyword)
{
$trMap = [
'google' => '谷歌',
'' => '',
];
foreach ($trMap as $key => $value) {
if (strpos($keyword, (string)$key) !== false) {
return $value;
}
} return '其他';
} echo translate("google") . PHP_EOL;
echo translate('') . PHP_EOL; 结果:
//谷歌
//

建议: 如果确定变量的类型,一定要严格转化之后 ,再进行操作

2)注意array_merge 与 + 的区别使用

$arr1 = ['a' => , 'b' => ];
$arr2 = ['b' => , 'd' => ]; // 以 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 = [, ];
$arr4 = [, , ]; // 可以看到 + 依然会对索引数组的 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,
)

最新文章

  1. JNI笔记之 初体验
  2. [Asp.net MVC]Asp.net MVC5系列——添加模型
  3. ACM: Gym 100935F A Poet Computer - 字典树
  4. 哎呀,发现自己不会用模块的方式用kprobe啊,弱爆了
  5. [C#]AES加密算法实现
  6. Device ID
  7. insert---插入记录
  8. 3 WPF之从0开始学习XMAL
  9. WebApp开发:ajax请求跨域问题的解决
  10. jdk7 中Collections.sort 异常
  11. Java与C++相异的地方
  12. 【双模卡的相关知识】解SIM卡前需要知道的信息(SIM年分和厂商识别)
  13. 整理自己的.net工具库
  14. Hibernate中Session之get和load方法的真正区别
  15. 关于H5在微信浏览器内自动转格式,导致不能正常打开的问题
  16. SCSS 在项目中的运用
  17. bootstrap-table前端修改后台传来的数据重新进行渲染
  18. MT【34】正余弦的正整数幂次快速表示成正余弦的线性组合
  19. POJ3126(KB1-F BFS)
  20. idea html热部署

热门文章

  1. android开发——用户头像
  2. 【工具大道】ssh登录Linux服务器,并显示图形化界面
  3. Loj #3057. 「HNOI2019」校园旅行
  4. PHP服务器Apache与Nginx的对比分析
  5. C++ 星号* 与 引用&
  6. 转://通过udev创建ASM共享磁盘(RAC)
  7. ClickHouse最简单的安装方法
  8. centos7 mysql5.7安装
  9. docker 3 docker安装
  10. day08--文件操作(2)