php explode 无效原因

300 阅读1分钟

在一次开发中,遇到了php5.0 explode函数分割无效,在网上查阅了相关资料没有找到相关的办法,经过自分析思考解决了问题,记录下自己的解决思路。

我的数据是从数据库中取得的,打印出来他的格式如下:

string(30) "9850404640240	
	9850404735465"

当我把打印的数据写死的时候,使用空格进行分割,explode(" ",ltrim($delivery_no) ,如上所示的代码,是没有问题的,但是直接从数据库里取数据的时候,就是会分割失败。

我分析执行失败的原因,有两种情况,第一是delimiter 分隔符有问题,第二是输入的字符串有问题。根据这两个思路逐一的进行排查,使用了ltrim 去除前后的空格,并进行dump输出查看字符串,确保输入的字符串没有问题。那么就是分割符存在问题。

分割符的问题,我首先想到的是否中英文输入法的空格是否不一样呢?空格我尝试打印,区别不出来中英文输入法状态下是否有区别,于是尝试用代码进行尝试

 $res2 = strlen(explode(" ",ltrim($delivery_no) )[0]) > 20 ? explode(" ",ltrim($delivery_no)) : explode(" " , ltrim($delivery_no));

经过尝试,编辑器一直提示我这一行代码存在相似的代码,那就是说名中英文状态下的空格应该是一样的没有像逗号,句号那样很明显的差异。继续思考空格还会存在什么样的问题?在网上查找资料没有找到有效的解决方法,但在查阅资料的时候,忽然灵光一闪是不是可以使用其他形式表示空格分割,让后尝试了“ ”,“/n”,"/r"等方法。最终发现“/n”可以解决我遇到的explode分割无效的问题。

至此,豁然开朗,原来我获取到的数据看起来像是空格,可是实际上却是一个换行,所以分割他无效也是理所应当的,找到了问题,接下来就是很容易的修改代码,问题就解决了!

// 处理空格分割订单号
$res2 = strlen(explode(" ",ltrim($delivery_no) )[0]) > 20 ? explode("\n",ltrim($delivery_no)) : explode(" " , ltrim($delivery_no));

以上就是我遇到问题的解决办法,希望以后能牢记解决问题的思路方法!