PHP字符串处理的思考与记录

来源:互联网 发布:添加网络打印机搜不到 编辑:程序博客网 时间:2024/05/29 19:21

    • 判断字符串是否为空
    • 判断字符串是不是全是空格
    • 将字符串以空格分割为数组
    • 将16进制字符串转换为10进制
    • 判断一个字符串是否都是空格

判断字符串是否为空

判断字符串为不为空,不能使用empty,因为empty会认为’0’也是空的

$s = '0';if(empty($s)) {    var_dump('s为空');} else {    var_dump('s不为空');}

输出

"s为空"

‘0’ 显然是不为空的,所以使用empty判断字符串是否为空就是个陷阱!

后面改进为,方法一:

if(!isset($s) || $s === '') {    var_dump('s为空');} else {    var_dump('s不为空');}

输出

$s = array();  //输出:"s不为空"$s = 0;        //输出:"s不为空"$s = '0';      //输出:"s不为空"$s = '';       //输出:"s为空"$s = null;     //输出:"s为空"$s = NULL;     //输出:"s为空"$s = 'null';   //输出:"s不为空"

数组和数字也被判定成不为空了。

不过既然是弱类型语言,到时候这些也可以转为字符串格式来使用,所以关系不大。

但是在特殊情况下,需要更严格的检查方案,则需要再改进下:

方法二:

if(!isset($s) || !is_string($s) || strlen($s) == 0) {    var_dump('s为空');} else {    var_dump('s不为空');}

先判断有没有赋值,然后判断是不是字符串,最后判断字符串长度是不是为0,有了三重保险,输出:

$s = array();  //输出:"s为空"$s = 0;        //输出:"s为空"$s = '0';      //输出:"s不为空"$s = '';       //输出:"s为空"$s = null;     //输出:"s为空"$s = NULL;     //输出:"s为空"$s = 'null';   //输出:"s不为空"

这样把非字符串类型也排除在外了。

使用什么方法判定字符串为不为空要根据具体需求,如果对类型不那么严格,用方法一;如果只允许字符串,使用方法二。

判断字符串是不是全是空格

$is_space = ctype_space($text);

如果全是空格,返回true;如果不是,返回false。

将字符串以空格分割为数组

$test_array = explode(' ', $test_string);

如果使用上面的方式,那就太单纯了,假如字符串包含多个空格怎么办?

需要使用以下方法:

$test_array = preg_split('#\s+#', $test_string);

将16进制字符串转换为10进制

$a = '0x000000010184f2fc';// 方法一$b = intval($a, 16);var_dump($b); // 输出: 4320457468// 方法二$c = base_convert($a, 16, 10);var_dump($c); // 输出: 4320457468

intval()函数可以将字符串转为10进制整数
参数一为要转换的数字(字符串类型)
参数二是可选参数,用来指定基底,默认是10
也就是说,字符串为‘0x’开头,是16进制格式,参数二要指定为16
字符串为‘0’开头,是8进制格式,参数二要指定为8
返回值为10进制整数;如果不能识别该字符串,则返回0

base_convert()函数也可以用来转换进制,只不过返回的还是字符串类型的数字
参数一为要转换的数字(字符串类型)
参数二为当前的进制
参数三为要转换的进制
返回值为相应进制的数字(字符串类型);如果字符串不能识别,则返回‘0’。

判断一个字符串是否都是空格

方法一,使用正则表达式判断:

$test = "   \t   ";$pattern = '/^(\s+)$/';$is_match = preg_match($pattern, $test);if ($is_match) {    var_dump('都是空格');} else {    var_dump('不都是空格');}// 输出:都是空格

‘\t’ 制表符也是空格。

方法二,使用ctype_space()函数:

$test = "   \t   ";$is_match = ctype_space($test);if ($is_match) {    var_dump('都是空格');} else {    var_dump('不都是空格');}
0 0
原创粉丝点击