Home  >  Article  >  Backend Development  >  php使用explode分割字符串新手容易忽略的问题

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

WBOY
WBOYOriginal
2016-06-20 12:35:47913browse

1.explode方法说明

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

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

返回由字符串组成的数组,每个元素都是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 class="brush:php;toolbar:false">';print_r($arr);echo '
';?>1234567

输出:

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



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

<?php$str = '1,2,3,4,5,6,7,8,9';$arr = explode(',', $str, 5);echo '<pre class="brush:php;toolbar:false">';print_r($arr);echo '
';?>1234567

输出:

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



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

<?php$str = '1,2,3,4,5,6,7,8,9';$arr = explode(',', $str, -3);echo '<pre class="brush:php;toolbar:false">';print_r($arr);echo '
';?>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 class="brush:php;toolbar:false">';print_r($arr);echo '
';?>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    }}?>


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn