主要內容:總結了第四章,主要關于字符串處理。參考書籍《精通 php5 應用開發》。

          1 )字符串運算符

          其他運算符好多與 java 類似。不過字符串鏈接符號就不同: php 中用 '.'

          ???

          2 )字符串分析

          在某些語言里字符串是作為字符數組處理的,而 php 把字符串作為一種基本的數據類型來處理。因此, php 使用特定的函數對字符串進行分析。

          ??? 基本的字符串分析函數:

          ??? strlen () :計算字符串的長度

          ??? substr () :取子串

          ??? strpos() strrpos(): 計算子字符串出現的位置

          ??? eg:

          $str = "hello php world! ";

          ?????? echo "<br>";?

          ?????? echo substr($str,10,4);

          ?????? echo "<br>";?

          ?????? echo substr($str,10);

          ?????? echo "<br>";?

          ?????? echo strpos($str,"l");

          ?????? echo "<br>";?

          ?????? echo strrpos($str,'l');

          ?????? echo "<br>";?

          ??? strpos 方法是取第一個匹配位子, strrpos 方法是取最后一個匹配的位子。而這兩個方法需要注意一點:當

          ??? 沒有查詢到特定字符串出現的位置時,函數將返回 FALSE 。因此判斷一個字符串中是否含有另外一個子串的正確方法是

          ??? 使用恒等 “===”

          ??? eg:

          ??? if(strpos($str,"w")===false)

          ??? {//...}

          3 )取字符串偏移 ( 訪問字符串中的字符 )

          如上的方法基本能對字符進行基本操作。

          但是下面介紹一些方法來方便的訪問字符串的字符

          ???

          ??? 一個非常好用的方法那就是使用 {} 括號來取偏移字符

          ??? eg:

          ??? $str= 'this is a book.';

          ??? echo $str{3};//output 's'

          ??? 利用這個方法反序排列字符串:

          ??? $str="this is a book.";

          ??? $len = strlen($str);// 這里前面一直出錯,一個錯誤是因為 $len 前加了個 int

          ??? for($i=$len-1;$i>=0;$i--)

          ??? {

          ?????? echo $str{$i};

          ??? }

          4 )字符串中的分割與連接

          ?

          ??? 分隔字符串,可以使用函數 explode () ,該函數有三個參數,第一個參數設置一個分割字符(串)。第二個參數指定所要操作的字符串。第三個參數可選,指定最多將字符串分割為多少子串。該函數返回一個由被分割的子串組成的數組。

          eg

          ?????? <?php

          ?????? $this_year = 2007 ;

          ?????? $text = <<< EOT

          ?????? 祝無雙 , F , 1982 , 廣東 , 普通職員

          ?????? 李大嘴 , M , 1981 , 河北 , 普通職員

          ?????? 佟香玉 , F , 1980 , 山西 , 項目經理

          EOT;

          ?????? $lines = explode ( "\n" , $text );

          ?????? foreach ( $lines as $userinfo )

          ?????? {

          ?????????? $info = explode ( "," , $userinfo , 3 );

          ?????????? $name = $info [ 0 ];

          ?????????? $sex =( $info [ 1 ]== "F" )? " " : " " ;

          ?????????? $age = $this_year - $info [ 2 ]; ????????

          ?????????? echo " 姓名 :" . $name . " " . $sex . " 年齡: " . $age . "<br>" ;

          ?????? }

          ??? ? ?>

          ?

          關于定界符 <<< ,字符串必須包含在一組定界符內。細節 結束符號必須頂格。

          剛開始看書上的 EOT ,EOD 以為有什么區別,結果我試了下,隨便寫。前后對應,符合標識符的命名規則就行。

          ?

          php explode 對應 JAVA javascript 里的 split 方法。】

          ?

          連接字符串 implode() 函數,它的別名叫 join

          eg

          ??? <? php

          ??? ??? $fruits = array ( 'apple' , 'banana' , 'pear' );

          ??? ??? $tem = join ( "," , $fruits );

          ??? ??? echo $tem ;

          ??? ? ?>

          javascript 里面有 join 方法,也能很方便將數組組合為字符串。

          ?

          5 )字符串的整理

          刪除字符串的空白, trim () .

          ?????? <?php

          ?????? $str = "???????? sdf" ;

          ?????? echo strlen ( $str );

          ?????? echo "<br>" ;

          ?????? echo strlen ( trim ( $str ));

          ??? ? ?>

          trim 刪除的是前后空格。

          ltrim rtrim 兩個函數也是刪除空格,一個刪除左邊空格,一個刪除右邊空格。

          而且刪除的是單字節空格,當這些空格是全角空格這些函數是沒有作用的。

          【?但雙字節空格在程序里怎么分的?】

          ?

          6 )字符串的填補

          ?

          str_pad 函數用于進行字符串的填補工作,

          第一個參數是處理的字符串對象,第二參數是總長度,第三個參數是指長度不夠總長以什么符號來填補,第四個參數為填補左邊還是右邊(默認不寫為填補右邊)。

          eg

          ??? <? php

          ?????? $prices = array (

          ?????? " 人員工資 " => 42840 , " 房租 " => 4000 , " 維修費 " => 925 ,);

          ?????? $sum = 0 ;

          ?????? foreach ( $prices as $title => $pay )

          ?????? {

          ?????????? $sum += $pay ;

          ?????????? echo str_pad ( $title , 15 , "=" );

          ?????????? echo str_pad ( $pay , 15 , "=" , STR_PAD_LEFT );

          ?????????? echo " <br>" ;

          ?????? }

          ?????? echo str_repeat ( "-" , 30 ), "<br>" ;

          ?????? echo str_pad ( " 總支出 " , 15 , "=" ); ?????

          ?????? echo str_pad ( $sum , 15 , "=" , STR_PAD_LEFT );

          ?????? echo " <br>" ;

          ??? ? ?>

          ?

          7 )字符串的反轉

          前面曾經講過字符串反轉的例子,實際上 php 已經內置了這個函數。 strrev () 函數可以對字符串中的字符反序排列,這種反序是按照字節進行的。

          ??? <?php

          ??? ? ?? echo strrev("hello world !");

          ??? ??>

          ?

          (8) 字符串大小寫轉換

          關于字符串大小寫的轉換函數,主要有以下四個。

          strtoupper (): 將給定的字符串全部轉換為大些字母

          strtolower () :將給定的字符串全部轉換為小寫字母

          ucfirst () 將給定的字符串的首字母轉換為大些,其余不變。

          ucwords () :將給定的字符串中全部單詞的首字母轉換為大寫。字符串中的單詞均以空白分隔。

          ??? <?php

          ?????? $str = "Tom Is A PHP Programer.";

          ?????? // 全部轉換為小寫

          ?????? $lower = strtolower($str);

          ?????? echo $lower;

          ?????? // 全部轉換為大寫

          ?????? $upper = strtoupper($str);

          ?????? echo $upper;

          ?????? // 將整句首字母大寫

          ?????? $string = 'hello php world!';

          ?????? echo ucfirst($string);

          ??? ??>

          ?

          9 )字符串的比較

          ?

          除了運算符: < > === 等,還可以有以下三種方法。

          ?

          按字節比較: strcmp() strcasecmp()

          ?

          放入 strcmp 的兩個字符串將按照字節的 ascii 碼值進行比較。從 $str1 $str2 各自的首字節開始。如果前者小于后者返回負數,反之正數,相等為零。

          【書上這里是錯的,他寫的是前者大于后者返回負數】

          ??? <? php

          ?????? $test = strcmp ( "Thomas" , "Tom" );

          ?????? echo $test ;

          ?????? if ( strcmp ( " 大連 " , " 大慶 " )> 0 )

          ?????? {

          ?????????? echo " 大連 " ;

          ?????? } else

          ?????? {

          ?????????? echo " 大慶 " ;

          ?????? }

          ??? ? ?>

          php 中也可以進行忽略大小寫比較,使用函數 strcasecmp (). 這就是說,同一個字符的大小寫形式認為是相等的。

          ?

          按自然排序法比較 strnatcmp() strnatcasecmp()

          ?

          模擬了人類的思維習慣。

          ??? <? php

          ??? $arr = array (

          ??? "photo1.jpg" , "photo2.jpg" , "photo10.jpg" , "photo12.jpg" ,);

          ??? $max_str = $arr [ 0 ];

          ??? for ( $i = 1 ; $i < count ( $arr ); $i ++)

          ??? {

          ?????? if ( strnatcmp ( $arr [ $i ], $max_str )> 0 )

          ?????? {

          ?????????? $max_str = $arr [ $i ];

          ?????? }

          ??? }

          ??? echo $max_str ;

          ??? ? ?>

          本來以為輸出是 photo2.jpg ,但經過 strnatcmp 輸出的結果是 photo12.jpg.

          strnatcasecmp 是這個函數也是忽略字母大小寫后,進行比較。

          ?

          使用模糊比較

          ?

          similar_text 作用在兩個字符串,返回它們中相匹配的個數。

          soundex() 計算出一個關鍵值。

          感覺用得少,不總結。

          ?

          10 )字符串的替換

          php 中提供了強大的字符串替換功能,可以使用 str_replace() strtr() 兩個函數實現字符替換功能。他們都可以將給定字符串的指定部分用另外一個字符串替換。

          str_replace() 函數有三個參數,第一個參數稱為目標對象,第二個參數是替換對象,最后一個參數是所要處理的字符串。通俗說:用第二個字符串替換第三個字符串中的第一個字符串對應的字符串。

          eg

          str_replace("\\","",$json);

          strtr 也叫字符串翻譯。我認為沒有必要記憶這么多相同功能的函數。 J

          11 )字符串的格式化

          php 中可以使用 printf() sprintf() 兩個參數有相同的參數列表,并且都支持多個參數。其中,第一個參數是格式化字符串,可以包含以百分號開始,且以格式類型字符結束的格式單元。格式單元的數量可以任意。函數中余下的參數變量將按順序放到這些單元中格式化。

          <? php

          ?????? // 日期的表示

          ?????? $date = sprintf ( "%04d-%02d-%02d" , 2006 , 9 , 3 ); // 返回 "2006-09-03"

          ?????? echo $date ;

          ?????? // 價格的表示

          ?????? $money1 = 1038.45 ;

          ?????? $money2 = 2154.75 ;

          ?????? $sum_money = sprintf ( "%01.2f " , $money1 + $money2 ); // 返回 "3193.20 "

          ?????? echo $sum_money ;

          ?????? // 整數和字符串

          ?????? $format = "There ara %d dogs in %s." ;

          ?????? printf ( $format , "5.1" , "my room" ); // 輸出 There ara 5 dogs in? my room.

          ??????

          ?????? // 一個百分比

          ?????? printf ( "%.2f%%" , 32.1 ); // 輸出 "32.10%"

          ??? ? ?>

          格式化數字

          ?

          我們經常在國際慣例中發現,表示價格或其他數字,經常用到千位分隔符。

          number_format 2 種用法:

          第一種:

          ??? <? php

          ?????? $number = 1234.5678 ;

          ?????? echo number_format ( $number ); // 沒有小數,進行了四舍五入

          ?????? echo number_format ( $number , 2 ); // 保留 2 位小數,也進行了四舍五入

          ??? ? ?>

          這種也是我們常用的。而在個別地區的數字表示方式。例如數字的格式表示為“ 1 234,56

          <? php

          ?????? $number = 1234.5678 ;

          ?????? echo number_format ( $number , 2 , ',' , ' ' );

          ?>

          其中前兩個參數不用多說,第三個參數是小數點的表示,第四個參數是千位分隔符號。

          ?

          關于此次 php 學習,是項目用 php ,所以我學習 php ,剛開始沒有想到 php 有那么強大。隨后發現其非常強大,但是學習筆記也不打算繼續。只是以后在 php 中遇到什么問題,準備 php 手冊隨時查閱。

          posted on 2007-08-23 23:33 -274°C 閱讀(816) 評論(0)  編輯  收藏 所屬分類: PHP

          常用鏈接

          留言簿(21)

          隨筆分類(265)

          隨筆檔案(242)

          相冊

          JAVA網站

          關注的Blog

          搜索

          •  

          積分與排名

          • 積分 - 914173
          • 排名 - 40

          最新評論

          主站蜘蛛池模板: 阿克陶县| 沈阳市| 米脂县| 抚松县| 文成县| 辽中县| 益阳市| 荔波县| 奎屯市| 安徽省| 乌苏市| 五家渠市| 穆棱市| 渑池县| 平果县| 福贡县| 兴业县| 南宁市| 钟祥市| 常山县| 崇明县| 灵璧县| 曲周县| 津南区| 水城县| 余干县| 化德县| 靖边县| 莱西市| 凉山| 北流市| 阜新| 咸宁市| 右玉县| 万源市| 安塞县| 大同县| 余江县| 潜山县| 德昌县| 巧家县|