php學習第二章:字符串處理函數(二)字符串查找、替換、截取等


1、字符串比較

  (1)strcmp($str1,$str2)  //比較兩個字符串是否相等,當結果為0時表示相等,為1時表示第一個字符串大於第二個字符串,為-1是第一個字符串小於第二個字符串(這是大於和小於只是位置上的比較,在ascii碼表中后面的字符大於前面的字符)

   

1  /**
2      * strcmp($str1, $str2) 比較兩個字符串是否相等
3      * @param string $str1 第一個字符串
4      * @param string $str2 第二個字符串
5      */
6     $str1 = 'hell';
7     $str2 = 'ello';
8     var_dump(strcmp($str1, $str2));  //輸出1,因為兩個字符串的首字母不同,比較首字母,h的位置在e后面,所以h比e大

  (2)strncmp($str1, $str2, $length); //比較兩個字符串截取指定長度的子串

1 /**
2      * strncmp($str, $str2, $len) 比較兩個字符串從開頭到指定長度的子串
3      * @param string $str1 第一個字符串
4      * @param string $str2 第二個字符串
5      * @param int $len 要截取的開頭
6      */
7     $str3 = 'my pleasure!';
8     $str4 = 'my book';
9     var_dump(strncmp($str3, $str4, 2));    //輸出0,因為兩個字符串截取兩個長度都是my

  相關函數strcasecmp()比較兩個字符串時不區分大小寫,strnatcmp(),strnatcasecmp(),strncasecmp()和上述兩個函數相似,而且不是很常用,在此不再贅述

2、字符串查找

  (1)strstr($str,$need,bool $return_before=false) 查找字符串中從$need開始到結尾的字符串   <=>和strchr 是同義函數

 1 /**
 2      * strstr($str, $need, $return_before = false)  === strchr
 3      * @param string $str 要操作的字符串
 4      * @param string $need 要查找的字符串
 5      * @bool $return_before 是否返回$need在$str中首次出現之前的字符串
 6      * @description:返回$need在$str中首次出現的開始到字符串結尾的那段字符串
 7      * 相關函數:stristr()不區分大小寫,
 8      */
 9     $email = 'yimengshixin@yeah.net';
10     $email_suffix = strstr($email,'@');   //輸出@yeah.net
11     $domain = trim($email_suffix, '@');
12     var_dump($domain);                   //輸出yeah.net
13     $username = strstr($email, '@', true);
14     var_dump($username);                //輸出yimengshixin

  (2)strrchr($str, $need)  在字符串$str中查找從最后一次出現字符$need開始到字符串結尾的子串

/**
     * strrchr($str, $need)
     * @param string $str 要操作的字符串
     * @param string $need 要查找的字符(如果是一個字符串,就使用字符串的第一個字符)
     * @description:返回$need在$str最后一次出現的位置開始到字符串結尾的那段字符串
     */
    
    $url = 'http://www.test.com/news/detail/2012/11/26/9778.html';
    $baseName = strrchr($url, '/');    //輸出:/9778.html
    
    echo trim($baseName, '/');         //輸出:9778.html

  (3)strpos($str, $need) 在字符串$str中查找$need首次出現的位置,返回這個位置值    =>不區分大小寫時用stripos()

  (4)strrpos($str, $need) 在字符串$str中查找$need最后一次出現的位置,返回這個位置   =>不區分大小寫時用strripos()

 1 /**
 2      * strpos($str, $need [,int $offset])
 3      * @param string $str 要操作的字符串
 4      * @param string $need 要被搜索的字符
 5      * @param int $offset 搜索的起始位置(即字符串哪個字符開始算起)
 6      * @description:搜索$need在$str中首次出現的位置
 7      * 相關函數:stripos()不區分大小寫,strrpos()最后一次出現的位置
 8      */
 9     $path = 'var/cache/tpl/20121126.php';
10     $root_location = strpos($path, '/');   
11     var_dump($root_location);    //輸出3
12     var_dump(substr($path, 0, $root_location));   //輸出var
13     $filename_location = strrpos($path, '/');    
14     var_dump($filename_location);    //輸出13
15     var_dump(substr($path, 0, $filename_location)); //輸出var/cache/tpl
16     var_dump(substr($path, $filename_location, strlen($path))); //輸出/20121126.php

  (5)strpbrk($str, $charlist) 查找字符集$charlist的任意一個字符在$str首次出現的位置開始到結尾的子串

1  /**
2      * strpbrk($str, $charlist)
3      * @param string $str 要操作字符串
4      * @param string $charlist 要查找的字符集
5      * @description:在$str中查找$charlist中任意一個字符,返回指定字符第一次出現的位置開始的剩余部分
6      */
7     $string = 'We have nothing to do!';
8     $need = 'ahvt';
9     var_dump(strpbrk($string, $need)); //輸出have nothing to do,因為在字符串$string中,h出現的位置在a前

3、字符串的截取與轉化

  (1)substr($str, $start, $length)  截取字符串從$start開始截取$length個字符串形成的子串

1 /**
2      * substr($str, $start, $length)
3      * @param string $str 要截取的字符串
4      * @param int $start 起始位置
5      * @param int $length 截取的長度
6      * @description : 截取字符串$str中從start位置開始截取$length個長度
7      */
8     $sStr = 'http://bbs.test.com';
9     var_dump(substr($sStr, 0, 4));    //輸出http

  擴展:多字節字符串的截取(如漢字)

  mb_substr()用法與substr()類似

  mb_substr($str, $start, $length, $charset)

  

1 /**
2      * mb_substr($str, $start, $length,$charset) 截取多字節的字符串和substr()用法一樣
3      * @param string $charset 編碼類型
4      */
5     $var = '中國人民abc';
6     var_dump(mb_substr($var,0,5,'utf-8'));

 

  (2)implode($sep, $str) 將字符串通過分隔符轉化為數組

1 /**
2      * explode($sep, $str) 通過一個分隔符將一個字符串轉化為一個數組
3      * @param string $sep 分隔符
4      * @param string $str 要分隔的字符
5      */
6     $dir = 'var/www/cache/tpl';
7     //輸出:array 0 => string 'var' (length=3)1 => string 'www' (length=3)2 => string 'cache' (length=5) 3 => string 'tpl' (length=3)
8     var_dump(explode('/', $dir));  

  (3)impolde($sep, $str) 將數組通過分隔符轉化為字符串    <=>join

 1 /**
 2      * implode($sep, $array) 將數組通過分隔符連接成一個字符串
 3      * @param string $sep 分隔符
 4      * @param string $str 要分隔的字符
 5      * 
 6      */   
 7     $dirArray = array('http:/','bbs.test.com','index.php','news','detail','499','page','2.html'); 
 8     //輸出:http://bbs.test.com/index.php/news/detail/499/page/2.html
 9     var_dump(implode('/', $dirArray));
10     var_dump(join('/',array('www','var')));    //輸出www/var

  (4)str_split($str, $length) 將字符串根據指定的長度分隔成一個數組(處理漢字時請注意編碼,編碼不同,所占字符長度也不同)

1 /**
2      * str_split($str, $length) 根據長度將字符串分割成數組
3      * @param string $str 要分割的字符串
4      * @param int $length 要分割的長度
5      */
6     $split_str = '劉大,牛二,張三,李四,王五,朱六,廖七,周八,肖九';
7     var_dump(str_split($split_str, 7));  //輸出:array(0=>'劉大',1=>'牛二'……)
8     

4、字符串替換、填充等

  (1)str_replace($search, $replace, $str); 將字符串中$search部分用$replace來替換

1 /**
2      * str_replace($search, $replace, $str)
3      * @param string $search 要被替換的字符串
4      * @param string $replace 替換后的字符串
5      * @param string $str 要操作的字符 串
6      */
7     $bad = 'bad man';
8     var_dump(str_replace('bad', 'good', $bad));     //輸出good man

  (2)substr_replace($str, $replace, $start, $length) 在字符串$str副本中從$start位置開始截取$length個字符形成的字符串,並將這段字符串替換成指定字符串返回

 1  /**
 2      * substr_replace($str, $replace, $start, $length) 截取$str副本中從$start開始截取$length個字符並替換為$replace
 3      * @param string $str 要操作的字符串
 4      * @param string $replace 替換后的字符串
 5      * @param int $start 開始位置
 6      * @param int $length 長度
 7      */
 8     $old = 'hello javascript!';
 9     var_dump(substr_replace($old, 'php', 6, strlen($old)));   //輸出hello php!
10     var_dump($old);                                           //輸出hello javascript!沒有改變
11     

  (3)str_repeat($str, $times);    將字符串$str重復$times次形成新的字符串

1  /**
2      * str_repeat($str, $times)
3      * @param string $str 要重復的字符串
4      * @param int $times 重復的次數
5      */
6     var_dump(str_repeat('##',6));    //輸出:############

  (4)str_pad($str, $pad_length, $pad_str, $pad_type) 字符串填充

 1  /**
 2      * str_pad($str, $pad_length, $pad_str,  $pad_type = STR_PAD_RIGHT)
 3      * @param string $str 被操作的字符串
 4      * @param int $pad_length 填充后的長度
 5      * @param string $pad_str 用於填充的內容
 6      * @param const $pad_type 填充方向,分別有這向個常量 :STR_PAD_LEFT(從左邊填充),STR_PAD_RIGHT(從右邊填充),STR_PAD_BOTH(兩邊填充)
 7      */
 8     var_dump(str_pad('abc',10,'**'));    //輸出abc*******
 9     var_dump(str_pad('abc', 7, '*',STR_PAD_LEFT));  //輸出****abc
10     var_dump(str_pad('abc', 6, '*', STR_PAD_BOTH));     //輸出 *abc**

5、與ASCII相關的字符串操作

  (1)ord(string $char)返回字符串對應的ASCII碼值

  (2)chr(int $ascii)    返回ascii值對應的字符

1 /**
2      * int ord(string $char)
3      */
4     var_dump(ord('A'));       //輸出65
5     
6     /**
7      * string chr(int $ascii)
8      */
9     var_dump(chr(72));        //輸出H

6、與html轉義有關的

  (1)strip_tags($str, $remain_tags)  刪除html或xml標簽(其實只要是<>都會被過濾掉)

  (2)nl2br($str) 在新行前加入<br/>換行

  (3)wordwrap($str, $length) 自動換行(強制換行)

   

 1  /**
 2      * strip_tags($str, $remain_tags)
 3      * @param string $str
 4      * @param string $remain_tags 要留的tag
 5      */
 6     $html = '<h3>標題<span>更多</span><h3> <a href="http://www.test.com">鏈接</a><now></now>';
 7     var_dump(strip_tags($html));    //輸出:標題更多 鏈接
 8     var_dump(strip_tags($html, '<h3>'));  //輸出:<h3>標題更多<h3> 鏈接
 9     
10     /**
11      * nl2br($str) 新行前添加<br/>
12      */
13     $nl = '
14     very good!';
15     var_dump(nl2br($nl));    //輸出:'<br />                       very good!
16     
17     /**
18      * wordwrap($str, $length) 強制換行(自動換行)
19      */
20     $line = '0123456789abcdefghijklmnopqrstuvwxyz';
21     $newText = wordwrap($line, 10, '<br/>');
22     var_dump($newText);

  (4)htmlspecialchars($str, $style) 把幾個預定義的字符轉義成實體

  需要轉義的字符:雙引號",單引號',大於號>,小於號<,還有&

  $style有三個常量可供選擇:ENT_COMPAT(只轉義雙引號,默認),ENT_QUOTES(雙引號和單引號都轉義),ENT_NOQUOTES(雙引號和單引號都不轉義)

 1 /**
 2      * htmlspecialchars($str, $style, $charset)
 3      * @param string $str 要操作的字符串(要實體化)
 4      * @param const $style 操作方式:
 5      */
 6     $var1 = '<h3>you are a "bad" man!<h3>&me?'; //輸出:&lt;h3&gt;you are a &quot;bad&quot; man!&lt;h3&gt;&amp;me?
 7     $var2 = "<h3>It's my pleasure!</h3>&me?";   //輸出:&lt;h3&gt;It's my pleasure!&lt;/h3&gt;&amp;me?
 8     var_dump(htmlspecialchars($var1));
 9     var_dump(htmlspecialchars($var2));
10     var_dump(htmlspecialchars($var2,ENT_QUOTES)); //輸出:&lt;h3&gt;It&#039;s my pleasure!&lt;/h3&gt;&amp;me?

  (5)htmlentities($str,$flag =ENT_COMPAT,$charset)

  將更多的字符轉義成html實體

  (6)addslashes($str)和stripslashes($str)為單引號和雙引號添加轉義\

7、對字符串進行計算(有的也理解為加密)

  (1)cypt($str) 計算單字符串散列

  (2)md5($str) 進行md5計算

8、其他未分類

  (1)strrev($str) 反轉字符串

  如:$a = 'abc';

    var_dump(strrev($a));   //輸出:cba

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM