关于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,
 )
复制代码

 

posted @   X-Wolf  阅读(547)  评论(0)    收藏  举报
编辑推荐:
· 从零实现富文本编辑器#3-基于Delta的线性数据结构模型
· 记一次 .NET某旅行社酒店管理系统 卡死分析
· 长文讲解 MCP 和案例实战
· Hangfire Redis 实现秒级定时任务,使用 CQRS 实现动态执行代码
· Android编译时动态插入代码原理与实践
阅读排行:
· 使用TypeScript开发微信小程序(云开发)-入门篇
· 没几个人需要了解的JDK知识,我却花了3天时间研究
· C#高性能开发之类型系统:从 C# 7.0 到 C# 14 的类型系统演进全景
· 管理100个小程序-很难吗
· 在SqlSugar的开发框架中增加对低代码EAV模型(实体-属性-值)的WebAPI实现支持
 
点击右上角即可分享
微信分享提示