官术网_书友最值得收藏!

2.4 字符串

2.4.1 概念

字符串(string)是由若干字符組成的序列。string有4種表示方法:單引號、雙引號、heredoc、nowdoc,它們的區(qū)別如表2-6所示。

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

2.4.2 面試題:從string中取其中的單個字符

題目描述:如何從string中取出其中的單個字符。

可以用下標(biāo)取出當(dāng)前位置的字符,并支持修改。

程序代碼如下:(源碼文件: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之后,字符串就沒有這種限制了。出現(xiàn)這種情況的原因,是因?yàn)镻HP底層對于字符串設(shè)計(jì)的改變。

PHP 5.x的結(jié)構(gòu)如下:

可以看到,字符串的長度被放到一個4字節(jié)的int里,而int所能表示的最大數(shù)字為231-1。

而PHP 7里,string的內(nèi)部結(jié)構(gòu)如下:

字符串的長度是size_t,而size_t與機(jī)器位數(shù)有關(guān)。在64位機(jī)器上,size_t為8個字節(jié),所能表示的最大數(shù)字為264

2.4.4 面試題:反轉(zhuǎn)字符串

題目描述:如何反轉(zhuǎn)一個字符串,例如將“hello”轉(zhuǎn)化為“olleh”。

這是一道比較簡單的題目,但也需要考慮性能問題。最簡單的實(shí)現(xiàn)方法,是從尾到頭遍歷字符串,并拼接起來。

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

以上代碼從結(jié)果來看,并沒有問題。但要注意考慮以下兩點(diǎn):

1.如何減少中間結(jié)果的內(nèi)存浪費(fèi)

對于Java、PHP等語言,字符串每次賦值都會生成臨時字符串,造成內(nèi)存浪費(fèi)。在第8行,每一次拼接都會產(chǎn)生臨時字符串。

2.如何減少遍歷次數(shù)

事實(shí)上,對一個長度為n的字符串,不需要從頭到尾遍歷n次,而只需找到中間位置,交換與中心對稱位置的字符。基于這些考慮,我們可以寫出更好的實(shí)現(xiàn)方式。

程序代碼如下:(源碼文件:ch02/reverse_string_v2.php)

主站蜘蛛池模板: 乌审旗| 广平县| 水城县| 德令哈市| 卢龙县| 莲花县| 大同市| 丹东市| 诏安县| 文登市| 颍上县| 金阳县| 榆中县| 邛崃市| 怀化市| 仙桃市| 江陵县| 界首市| 襄樊市| 启东市| 福州市| 宝山区| 洪洞县| 安新县| 博湖县| 汉中市| 东台市| 五指山市| 龙川县| 皮山县| 福鼎市| 赤峰市| 兰考县| 松阳县| 富民县| 朝阳县| 剑川县| 太仆寺旗| 通山县| 江川县| 密云县|