zoukankan      html  css  js  c++  java
  • 关于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,
     )
  • 相关阅读:
    心情不好的时候
    离骚
    沁园春.雪
    顾炎武《精卫》
    韩愈《祝融峰》
    Python量化交易的简单介绍
    H5页面跳转到小程序代码
    小程序上拉加载,下拉刷新
    第一阶段:Python开发基础 day36 并发编程之Process的join用法和其他用法
    课后练习 第一阶段:Python开发基础 day38 多线程相关小练习
  • 原文地址:https://www.cnblogs.com/xingxia/p/php_bug.html
Copyright © 2011-2022 走看看