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

5.3 字符串的基本操作

字符串的基本操作主要包括對字符串的格式化處理、連接切分字符串、查找字符串、替換字符串等。

5.3.1 手動(dòng)和自動(dòng)轉(zhuǎn)義字符串中的字符

手動(dòng)轉(zhuǎn)義字符串?dāng)?shù)據(jù),就是在引號內(nèi)(包括單引號和雙引號)通過“\”反斜杠使一些特殊字符轉(zhuǎn)義為普通字符。在介紹單引號和雙引號的時(shí)候已經(jīng)對這個(gè)方法進(jìn)行了詳細(xì)的描述。

自動(dòng)轉(zhuǎn)義字符串的字符,是通過PHP的內(nèi)置函數(shù)addslashes()來完成的。還原這個(gè)操作則是通過stripslashes()來完成的。以上兩個(gè)函數(shù),也經(jīng)常使用在格式化字符串中以用于MySQL的數(shù)據(jù)庫存儲(chǔ)。

5.3.2 計(jì)算字符串的長度

計(jì)算字符串的長度經(jīng)常在很多應(yīng)用中出現(xiàn),比如輸入框輸入文字的長度等,都會(huì)用到此功能。使用strlen()函數(shù)就可以實(shí)現(xiàn)這個(gè)功能。以下實(shí)例介紹計(jì)算字符串長度的方法和技巧。

【例5.4】(實(shí)例文件:ch05\5.4.php)

    <? php
      $someinput = "這個(gè)字符串的長度不長。length is not long."; //定義字符串變量
      $length = strlen($someinput);                             //獲取字符串變量的長度
      if(strlen($someinput)>50){
          echo "輸入的字符串的長度不能大于50個(gè)字符。";
      }else{
          echo "允許輸入字符串的長度,此字符串長度為$length";
      }
    ?>

運(yùn)行結(jié)果如圖5-4所示。

圖5-4 程序運(yùn)行結(jié)果

【案例分析】:

(1)其中$someinput為一個(gè)字符串變量。strlen($someinput)則直接調(diào)用strlen()函數(shù)計(jì)算出字符串的長度。

(2)在if語句中strlen($someinput)返回字符串長度并與50這一上限作比較。由于$someinput中有中文和英文兩種字符,它的長度為41,正如輸出所示。

(3)由于每個(gè)中文字占兩個(gè)字符位,每個(gè)英文字符占一個(gè)字符位,字符串內(nèi)的每個(gè)空格也算一個(gè)字符位,所以,最后字符串的長度為41個(gè)字符。

5.3.3 字符串單詞統(tǒng)計(jì)

有時(shí)對字符串的單詞進(jìn)行統(tǒng)計(jì)有更大意義。使用str_word_count()函數(shù)可以實(shí)現(xiàn)此操作,但是這個(gè)函數(shù)只對基于ASCII碼的英文單詞起作用,并不對UTF8的中文字符起作用。

下面通過實(shí)例介紹字符串單詞統(tǒng)計(jì)中的應(yīng)用和技巧。

【例5.5】(實(shí)例文件:ch05\7.php)

    <? php
      $someinput = "How many words in this sentance? Just count it.";      //定義
字符串變量
      $someinput2 = "這個(gè)句子由多少個(gè)漢字組成?數(shù)一數(shù)也不知道。";
      echo str_word_count($someinput)."<br />";                      //計(jì)算單詞個(gè)數(shù)
      echo str_word_count($someinput2);
    ?>

運(yùn)行結(jié)果如圖5-5所示。可見str_word_count()函數(shù)無法計(jì)算中文字符,查詢結(jié)果為0。

圖5-5 程序運(yùn)行結(jié)果

5.3.4 清理字符串中的空格

空格在很多情況下是不必要的,所以清除字符串中的空格顯得十分重要。比如在判定輸入是否正確的程序中,出現(xiàn)了不必要的空格,將增大程序出現(xiàn)錯(cuò)誤判斷的機(jī)率。

清除空格要用到ltrim()、rtrim()和trim()函數(shù)。其中l(wèi)trim()是從左面清除字符串頭部的空格。rtrim()是從右面清除字符串尾部的空格。trim()則是從字符串兩邊同時(shí)去除頭部和尾部的空格。

以下實(shí)例介紹去除字符串中空格的方法和技巧。

【例5.6】(實(shí)例文件:ch05\5.6.php)

    <? php
      $someinput = " 這個(gè)字符串的空格有待處理。";         //定義字符串變量
      echo "Output:".ltrim($someinput)."End <br />";      //清理字符串頭部的空格
      echo "Output:".rtrim($someinput)."End <br />";      //清理字符串頭部尾部的空格
      echo "Output:".trim($someinput)."End <br />";       //同時(shí)去除頭部和尾部的空格
      $someinput2 = " 這個(gè)字符串 的 空格有待處理。";    //定義中間有空格的字符串變量
      echo "Output:".trim($someinput2)."End";             //同時(shí)去除頭部和尾部的空格
    ?>

運(yùn)行結(jié)果如圖5-6所示。

圖5-6 程序運(yùn)行結(jié)果

【案例分析】:

(1)其中,$someinput為一個(gè)兩端都有空格的字符串變量。ltrim($someinput)從左邊去除空格,rtrim($someinput)從右面去除空格,trim($someinput)從兩邊同時(shí)去除,得到輸出如圖5-6所示。

(2)其中$someinput2為一個(gè)兩端都有空格,并且中間也有空格的字符串變量。用trim($someinput2)處理,但還只是去除兩邊的空格。

5.3.5 字符串的切分與組合

字符串的切分使用explode()和strtok()函數(shù)。切分的反向操作為組合,使用implode()和join()函數(shù)。其中explode()把字符串切分成不同部分后,存入一個(gè)數(shù)組。Impolde()函數(shù)則是把數(shù)組中的元素按照一定的間隔標(biāo)準(zhǔn)組合成一個(gè)字符串。

以下實(shí)例介紹去除字符串切分和組合的方法和技巧。

【例5.7】(實(shí)例文件:ch05\5.7.php)

    <? php
      $someinput = "How_to_split_this_sentance.";     //定義字符串變量
      $someinput2 = "把 這個(gè)句子 按空格 拆分。";  //定義按空格拆分的字符串
      $a = explode('_', $someinput);                   //切分字符串someinput
      print_r($a);                                  //輸出切分后的字符串
      $b = explode(' ', $someinput2);
      print_r($b);
      echo implode('>', $a)."<br />";                  //組合字符串$a
      echo implode('*', $b);
    ?>

運(yùn)行結(jié)果如圖5-7所示。

圖5-7 程序運(yùn)行結(jié)果

【案例分析】:

(1)其中explode()函數(shù)把$someinput和$someinput2按照下劃線和空格的位置把它們分別切分成$a和$b兩個(gè)數(shù)組。

(2)其中implode()函數(shù)把$a和$b兩個(gè)數(shù)組的元素分別按照“>”和“*”為間隔組合成新的字符串。

5.3.6 字符串子串的截取

在一個(gè)字符串中截取一個(gè)子串,就是字符串截取。

完成這個(gè)操作需要用到substr()函數(shù)。這個(gè)函數(shù)有3個(gè)參數(shù),分別規(guī)定了目標(biāo)字符串、起始位置和截取長度。它的格式如下:

    substr(目標(biāo)字符串,起始位置,截取長度)

其中目標(biāo)字符串是某個(gè)字符串變量的變量名,起始位置和截取長度都是整數(shù)。

如果都是正數(shù),起始位置的整數(shù)必須小于截取長度的整數(shù),否則函數(shù)返回值為假。

如果截取長度為負(fù)數(shù),則意味著,是從起始位置開始往后除去從目標(biāo)字符串結(jié)尾算起的長度數(shù)的字符以外的所有字符。

以下實(shí)例介紹去除字符串截取的方法和技巧。

【例5.8】(實(shí)例文件:ch05\5.8.php)

    <? php
      $someinput = "create a substring of this string.";   //定義字符串變量$someinput
      $someinput2 = "創(chuàng)建一個(gè)這個(gè)字符串的子串。";
      echo substr($someinput,0,11)."<br />";          //截取字符串前11個(gè)字符
      echo substr($someinput,1,15)."<br />";          //截取從第二個(gè)字符開始的前15個(gè)字
符
      echo substr($someinput,0, -2)."<br />";          //截取除最右側(cè)兩個(gè)字符外的字符
      echo substr($someinput2,0,12)."<br />";       //截取字符串前12個(gè)字符
      echo substr($someinput2,0,10)."<br />";       //截取字符串前10個(gè)字符
      echo substr($someinput2,0,11);               //截取字符串前11個(gè)字符
    ?>

運(yùn)行結(jié)果如圖5-8所示。

圖5-8 程序運(yùn)行結(jié)果

【案例分析】:

(1)其中$someinput為英文字符串變量。substr($someinput,0,11)和substr($someinput,1,15)展示了起始位和截取長度。substr($someinput,0, -2)則是從字符串開頭算起,除了最后兩個(gè)字符,其他字符都截取的子字符串。

(2)其中$someinput2為中文字符串變量。因?yàn)橹形淖址侨亲址颊純蓚€(gè)字符位,所以截取長度一定要是偶數(shù)。如果是單數(shù)則在此字符位上的漢字將不被輸出。如果在這樣截取長度為單數(shù)的字符串子串后連接其他字符串輸出,會(huì)出現(xiàn)輸出錯(cuò)誤。所以,要小心使用。

5.3.7 字符串子串替換

在某個(gè)字符串中替換其中的某個(gè)部分是重要的應(yīng)用,就像在使用文本編輯器中的替換功能一樣。

完成這個(gè)操作需要使用substr_replace()函數(shù),它的格式為:

    substr_replace(目標(biāo)字符串,替換字符串,起始位置,替換長度)

以下實(shí)例介紹字符串替換的方法和技巧。

【例5.9】(實(shí)例文件:ch05\5.9.php)

    <? php
      $someinput = "ID:125846843388648";                       //定義字符串變量
      echo substr_replace($someinput, "************",3,11)."<br />"; //字符串字串
替換
      echo substr_replace($someinput, "尾號為",3,11);              //輸出替換后的字符串
    ?>

運(yùn)行結(jié)果如圖5-9所示。

圖5-9 程序運(yùn)行結(jié)果

【案例分析】:

(1)其中,$someinput為英文字符串變量。從第三個(gè)字符開始為ID號。第一個(gè)輸出是以“************”替換第三個(gè)字符開始往后的11個(gè)字符。

(2)第二個(gè)輸出是用“尾號為”替代第三個(gè)字符開始往后的11個(gè)字符。

5.3.8 字符串查找

在一個(gè)字符串中查找另外一個(gè)字符串,就像文本編輯器中的查找一樣。實(shí)現(xiàn)這個(gè)操作需要用到strstr()或stristr()函數(shù)。其格式為:

    strstr(目標(biāo)字符串,需查找字符串)

如果函數(shù)找到需要查找的字符或字符串,則返回從第一個(gè)查找到字符串的位置往后所有的字符串內(nèi)容。

stristr()函數(shù)為不敏感查找,也就是對字符的大小寫不敏感。用法與strstr()相同。

以下實(shí)例介紹字符串查找的方法和技巧。

【例5.10】(實(shí)例文件:ch05\5.10.php)

    <? php
      $someinput = "I have a Dream that to find a string with a dream."; //定義英
文字符串
      $someinput2 = "我有一個(gè)夢想,能夠找到理想。";          //定義中文字符串
      echo strstr($someinput, "dream")."<br />";                   //查找指定的字符
串
      echo stristr($someinput, "dream")."<br />";
      echo strstr($someinput, "that")."<br />";
      echo strstr($someinput2, "夢想")."<br />";
    ?>

運(yùn)行結(jié)果如圖5-10所示。

圖5-10 程序運(yùn)行結(jié)果

【案例分析】:

(1)其中$someinput為英文字符串變量。strstr($someinput, "dream")大小寫敏感,所以輸出字符串最后的字符。stristr($someinput, "dream")大小寫不敏感,所以直接在第一個(gè)大寫的匹配字符就開始輸出。

(2)其中$someinput2為中文字符串變量。strstr()函數(shù)同樣對中文字符起作用。

5.3.9 大小寫轉(zhuǎn)換

在PHP中,通過使用大小寫轉(zhuǎn)換函數(shù),可以修改字符串中字母大小不規(guī)范的問題。常見的大小寫轉(zhuǎn)換函數(shù)如下:

    srting strtolower(srting str);  //轉(zhuǎn)換為小寫
    srting strtoupper(srting str);  //轉(zhuǎn)換為大寫
    srting ucfirst(srting str);     //整個(gè)字符串首字母大寫
    srting ucwords(srting str);   //整個(gè)字符串中以空格為分隔符的單詞首字母大寫

【例5.11】(實(shí)例文件:ch05\5.11.php)

    <? php
    $str = "hello I have a dream" ;       //定義英文字符串
   echo strtolower($str)."<br />";       //轉(zhuǎn)換為小寫
   echo strtoupper($str)."<br />";       //轉(zhuǎn)換為大寫
   echo ucfirst($str)."<br />";           //整個(gè)字符串首字母大寫
   echo ucwords($str)."<br />";         //整個(gè)字符串中以空格為分隔符的單詞首字母大寫
   echo $aa;                   //輸出原字符串
    ?>

運(yùn)行結(jié)果如圖5-11所示。

圖5-11 程序運(yùn)行結(jié)果

主站蜘蛛池模板: 鹤峰县| 夏邑县| 宜川县| 郎溪县| 黑水县| 米林县| 西和县| 三江| 宣武区| 柳河县| 镇康县| 白河县| 顺平县| 祁门县| 清丰县| 汉寿县| 崇信县| 古浪县| 娱乐| 乐昌市| 兴业县| 中超| 拉孜县| 得荣县| 永兴县| 个旧市| 会昌县| 蒙城县| 曲周县| 嵩明县| 湖口县| 拉萨市| 平阴县| 余姚市| 赣榆县| 南通市| 乐亭县| 泾阳县| 安溪县| 昆明市| 兴海县|