parse_str()之延伸

前段时间有同学提了个问题,怎么处理类似这种格式的字符串abc=abcval&kaka=kakaval&haha=hahaval&test=testval,以生成以下这种变量:
$abc = 'abcval'; $kaka = 'kakaval'; $haha = 'hahaval'; $test = 'testval';

刚开始我并不知道有parse_str()这个函数,于是写了以下算是比较长的代码:

$query_string = 'abc=abcval&kaka=kakaval&haha=hahaval&test=testval';

$query_arr = explode('&', $query_string);

$res = [];
foreach ($query_arr as $key => $val) {
    ${strstr($val, '=', true)} = substr($val, strpos($val, '=') + 1);
}

今天读某框架源码,发现了一个没用过的函数parse_str(),马上想起同学之前提的问题,没想到当时花了一两分钟写的代码只需要一个函数就搞定了:

$query_string = 'abc=abcval&kaka=kakaval&haha=hahaval&test=testval';
parse_str($query_string);

当然,parse_str()还可以返回数组形式的变量,此处就不多说。事情就这样完了么?怎么可能,喜欢打破沙锅问到底的我不可能不深究。

发现了parse_str(),玩了一会,发现之前所写的代码有些漏洞。初步发现在以下情况时返回的结果不对:

$query_string = 'abc=abcval&kaka=kakaval&=&haha&test';

于是改造了一下:

$query_string = 'abc=abcval&kaka=kakaval&=&haha&test';

$query_arr = explode('&', $query_string);

$res = [];
foreach ($query_arr as $key => $val) {
    if ($val != '=' && $val != '') {
        if (strstr($val, '=', true)) {
            ${strstr($val, '=', true)} = substr($val, strpos($val, '=') + 1);
        } else {
            ${$val} = '';
        }
    }
}

暂时来看,修改后的代码应该是没问题的。但是毕竟水平有限,能力之外的情况就无法考虑了,只是尽自己的认知去完善。

现实会有大量现成的方法去解决问题,如这次有PHP内置函数,可比我自己写的代码方便简洁多了,更不需要考虑各种各样的意外。然而成长有时候需要朝抵抗力最大的路径走,这条路或许没有芬芳,并不平坦,却有不一样的风景,收获的是不一样的心境。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值