两个实用性方法for PHP

本文详细介绍了如何优化PHP代码处理不确定对象、数组键值,通过函数避免误操作,并提供了针对正则表达式的中文处理方法。包括使用自定义函数检查变量类型、值及是否为空,以及如何正确地处理包含中文、数字、字母的正则表达式,以确保代码的健壮性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,不确定对象值或数组key

    慢慢的已经习惯性的抛弃了smarty,但是不经意间会想起<{$value->title|default:''}>的使用,不少程序员都会不经意间把不存在的对象值或者数组KEY值直接使用,或许是PHP的一种习惯.随着对报错和警告的进一步的深入,我们有必要在书写的时候做更多层判断.

    早些年我们或许会用到各种条件进行筛选: if(isset($a)&&is_array($a)&&!empty($a))  等    慢慢的你会发现这是过多的无用代码沉积,然而怎么解决这一现象呢,你马上会联想到smarty中<{$value->title|default:''}>,  随后进入其中发现原来smarty会进行多一次的处理,然而在PHP中如何解决呢:其实很简单function process($arr,$key,$type=null){
    $flag = false;
    $arr = (array)$arr;
    $re = '';

    if(isset($type) && is_string($type) && trim($type) != ''){
        switch($type){
            case 'string':
                $re = is_array($arr)?(isset($arr[$key])&&is_string($arr[$key])?$arr[$key]:""):"";//转换为字符串方法
                $flag = true;break;
            case 'array':
                $re = is_array($arr)?(isset($arr[$key])&&is_array($arr[$key])?$arr[$key]:array()):array();//转换为数组方法
                $flag = true;break;
            default:
                $re = '可自行加入其它数据形式';
                $flag = true;
        }
    }

    if($flag === false && !isset($arr[$key])){
        $re = '';//默认在所有不确定  返回空字符   可根据项目实际情况调节
        $flag = true;
    }

    if($flag === false && is_string($arr[$key])){
        $re = trim($arr[$key]);
        $flag = true;
    }

    if($flag === false && is_array($arr[$key])){
        $re = $arr[$key];
        $flag = true;
    }

    if($flag === false && is_integer($arr[$key])){
        $re = trim($arr[$key]);
        $flag = true;
    }

    if($flag === false){
        $re = '方法有漏洞,请更新!';//正式用时删除  测试方法使用
    }
    return $re;
}

你会发现只是一个很小的思考方式的改变而已,在以后的编码过程中你会慢慢的喜欢上这个方法,因为他实在可以为你省略很多无用代码.不过记住不要出现isset(process($a,'xx'))

这个就不做多说明.然而仅仅是这样也许会觉得不够,因为很多情况下为空的时候我们需要保留值,那么就会有下面

function setDefault($data, $key, $default=''){
    if (isset($data)){
        if (is_object($data) && isset($data->$key)){
            return $data->$key;
        }
        if (is_array($data) && isset($data[$key])){
            return $data[$key];
        }
        if (is_bool($data) || is_string($data) || is_int($data)){
            return $data;
        }
        return $default;
    }else {
        return $default;
    }
}

慢慢的你会发现你会有更多的需求,比如截取,截取后的留值等...

/**
 * 截取字符 if > $len ... else 空白    多添加一个字段$string   作为截取后追加字段可不填写
*/
function cut_str($str,$len=20,$strip_tags=false,$string=''){
    if ($strip_tags) {
        $str = strip_tags($str);
        $pattern = array('/\&nbsp;/', '/ {2,}/', '/\s{2,}/');
        $str = preg_replace($pattern, '', $str);
    }

    if (mb_strlen($str, 'utf-8') > $len)
    {
        return mb_substr($str,0,$len,"utf-8").$string;
    }
    else
    {
        return $str;
    }
}

也许你会感觉到为什么不将3个方法合并在一起呢?这个是绝对可以合并一起的,不过这就是一个泛的控制了,符合自己的才是最好的,灵活总会以牺牲一些为代价


2,正则中文的问题

   前不久在出来搜索的时候,突然来了一个特别有意思的需求,当关键词中含有数字,字母或汉字的时候才触发,貌似正则对于中文而已确实有那么点坑爹,找了好久的资料才找出解决方案

 function passValid($string){
    $flag = false;
    
    if(preg_match("/[a-zA-Z0-9]{1,}/",$string) == false){
        if(preg_match("/^.*[\x{4e00}-\x{9fa5}]+$/u",$string)){
            $flag = true;
        }
    }else{
        $flag = true;
    }
     return $flag;
 }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值