购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.4 字符串

2.4.1 概 念

字符串(string)是由若干字符组成的序列。string有4种表示方法:单引号、双引号、heredoc、nowdoc,它们的区别如表2-6所示。

表2-6 字符串的表示方法

2.4.2 面试题:从string中取其中的单个字符

题目描述: 如何从string中取出其中的单个字符。

可以用下标取出当前位置的字符,并支持修改。

程序代码如下:(源码文件:ch02/string_index.php)

     <?php
     $str = 'hello';
     
     echo $str[0];
     //Output h
     
     
     $str[1] = 'a';
     echo $str;
     //Output hallo

2.4.3 面试题:求字符串表示的最大长度

题目描述: 字符串所能表示的最大长度是多少?

PHP 7之前的版本(5.x),string所能表示的最大长度为2GB。PHP 7之后,字符串就没有这种限制了。出现这种情况的原因,是因为PHP底层对于字符串设计的改变。

PHP 5.x的结构如下:

可以看到,字符串的长度被放到一个4字节的int里,而int所能表示的最大数字为2 31 -1。

而PHP 7里,string的内部结构如下:

字符串的长度是size_t,而size_t与机器位数有关。在64位机器上,size_t为8个字节,所能表示的最大数字为2 64

2.4.4 面试题:反转字符串

题目描述: 如何反转一个字符串,例如将“hello”转化为“olleh”。

这是一道比较简单的题目,但也需要考虑性能问题。最简单的实现方法,是从尾到头遍历字符串,并拼接起来。

程序代码如下:(源码文件:ch02/reverse_string_v1.php)

以上代码从结果来看,并没有问题。但要注意考虑以下两点:

1.如何减少中间结果的内存浪费

对于Java、PHP等语言,字符串每次赋值都会生成临时字符串,造成内存浪费。在第8行,每一次拼接都会产生临时字符串。

2.如何减少遍历次数

事实上,对一个长度为n的字符串,不需要从头到尾遍历n次,而只需找到中间位置,交换与中心对称位置的字符。基于这些考虑,我们可以写出更好的实现方式。

程序代码如下:(源码文件:ch02/reverse_string_v2.php) gqHMJsASxqrRxvsC4nO0/fdNY9jS+ZmiIGMJ1U0j1g75HorEME77Np3jViRfznC6

点击中间区域
呼出菜单
上一章
目录
下一章
×