php使用explode分割字符串新手容易忽略的问题

1.explode方法说明

explode方法可以使一个字符串按某一个字符串作为边界点来分割成数组。

array explode ( string $delimiter , string $string [, int $limit ] )

返回由字符串组成的数组,每个元素都是string的一个子串,被字符串delimiter作为边界点分割出来。

参数说明:
delimiter
边界上的分隔字符。

string
输入的字符串

limit
如果设置了limit参数并且是正数,则返回的数组最多包含limit个元素,而最后那个元素将包含string的剩余部分。
如果limit参数是负数,则返回除了最后的-limit个元素外的所有元素。
如果limit是0,则会被当做1。


2.例子

使用,分割字符串

<?php
$str = '1,2,3,4,5,6,7,8,9';
$arr = explode(',', $str);
echo '<pre>';
print_r($arr);
echo '</pre>';
?>

输出:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
    [7] => 8
    [8] => 9
)



使用,分割字符串,limit为正数

<?php
$str = '1,2,3,4,5,6,7,8,9';
$arr = explode(',', $str, 5);
echo '<pre>';
print_r($arr);
echo '</pre>';
?>

输出:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5,6,7,8,9
)



使用,分割字符串,limit为负数

<?php
$str = '1,2,3,4,5,6,7,8,9';
$arr = explode(',', $str, -3);
echo '<pre>';
print_r($arr);
echo '</pre>';
?>

输出:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
)



使用,分割字符串,limit为0

<?php
$str = '1,2,3,4,5,6,7,8,9';
$arr = explode(',', $str,0);
echo '<pre>';
print_r($arr);
echo '</pre>';
?>

输出:

Array
(
    [0] => 1,2,3,4,5,6,7,8,9
)


3.容易忽略的问题

一般我们会使用explode来分割id字符串之类的数据

<?php
$ids = '1,2,3,4';
$data = explode(',', $ids);
if($data){
    foreach($data as $k=>$v){
        // do sth
    }
}
?>

正常情况下ids不为空,看代码也不会发现什么问题,因为有判断if(data);一般会认为已经做了空的处理。
但实际情况却是ids=null, data却不是空,会导致foreach里执行的代码出问题。

<?php
$ids = null;
$data = explode(',', $ids);
if($data){
    print_r($data);
}else{
    echo 'null';
}
?>

因为ids=null,使用explode分割,得出的数组是Array ( [0] => )而不是Array()

所以判断需要修改一下才能避免问题发生

<?php
$ids = null;
$data = explode(',', $ids);
if(isset($data[0]) && $data[0]){
    foreach($data as $k=>$v){
        // do sth
    }
}
?>
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值