- PHP面試一戰(zhàn)到底
- 閆小坤
- 657字
- 2022-07-28 19:21:32
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)

- Cocos2d Cross-Platform Game Development Cookbook(Second Edition)
- Java程序設(shè)計(jì)實(shí)戰(zhàn)教程
- 匯編語言程序設(shè)計(jì)(第2版)
- Practical Game Design
- Data Analysis with Stata
- Bootstrap 4:Responsive Web Design
- Visual FoxPro程序設(shè)計(jì)習(xí)題集及實(shí)驗(yàn)指導(dǎo)(第四版)
- NGINX Cookbook
- Advanced Express Web Application Development
- Unity 2018 Augmented Reality Projects
- CodeIgniter Web Application Blueprints
- TypeScript圖形渲染實(shí)戰(zhàn):2D架構(gòu)設(shè)計(jì)與實(shí)現(xiàn)
- Python全棧開發(fā):基礎(chǔ)入門
- 深入淺出 HTTPS:從原理到實(shí)戰(zhàn)
- Three.js Essentials