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

1.explode方法说明

explode方法能够使一个字符串按某一个字符串做为边界点来分割成数组。php

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

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

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

string 
输入的字符串code

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


2.例子

使用,分割字符串字符串

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

输出:string

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



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

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

输出:class

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



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

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

输出:

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



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

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

输出:

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


3.容易忽略的问题

通常咱们会使用explode来分割id字符串之类的数据

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

正常状况下ids不为空,看代码也不会发现什么问题,由于有判断if(data);通常会认为已经作了空的处理。 
但实际状况倒是ids=null, data却不是空,会致使foreach里执行的代码出问题。

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

由于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
    }
}?>
相关文章
相关标签/搜索