后端开发 \ PHP \ php使用explode分割字符串新手容易忽略的问题

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

总点击48
简介:1.explode方法说明 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,$str,5);

echo '<pre>';

print_r($arr);

echo '</pre>';

?>

输出:

Array

(

[0] => 1

[1] => 2

[2] => 3

[3] => 4

[4] => 5,9

)


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

<?php

$str = '1,-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,0);

echo '<pre>';

print_r($arr);

echo '</pre>';

?>

输出:

Array

(

[0] => 1,9

)


3.容易忽略的问题

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

<?php

$ids = '1,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

}

}

?>

意见反馈 常见问题 官方微信 返回顶部