在php中字符串分割有很多,如有str_split,explode,chunk_split()函數,下面我給大家分別整理了一些實例.
str_split() 可以將字符串按照需要的長度做分割,但是如果字符串中有UTF-8編碼的中文出現,就會出現亂碼,如果需要實現支持中文的按照長度分割字符串的功能就需要額外處理,代碼如下:
- <?php
- $str = 'hello world';
- $arr = str_split($str);
- print_r($arr);
- /*
- Array
- (
- [0] => h
- [1] => e
- [2] => l
- [3] => l
- [4] => o
- [5] =>
- [6] => w
- [7] => o
- [8] => r
- [9] => l
- [10] => d
- )
- */
- $arr = str_split($str,2);
- print_r($arr);
- /*
- Array
- (
- [0] => he
- [1] => ll
- [2] => o
- [3] => wo
- [4] => rl
- [5] => d
- )
- */
- ?>
支持UTF-8編碼的中文的按照長度分割字符串函數,代碼如下:
- <?php
- /**
- * @version $Id: str_split.php 10381 2008-06-01 03:35:53Z pasamio $
- * @package utf8
- * @subpackage strings
- */
- function utf8_str_split($str, $split_len = 1)
- {
- if (!preg_match('/^[0-9]+$/', $split_len) || $split_len < 1)
- return FALSE;
- $len = mb_strlen($str, 'UTF-8');
- if ($len <= $split_len)
- return array($str);
- preg_match_all('/.{'.$split_len.'}|[^x00]{1,'.$split_len.'}$/us', $str, $ar);
- return $ar[0];
- }
- $str = 'hello 你好';
- $arr = utf8_str_split($str);
- print_r($arr);
- /*
- Array
- (
- [0] => h
- [1] => e
- [2] => l
- [3] => l
- [4] => o
- [5] =>
- [6] => 你
- [7] => 好
- )
- */
- ?>
主要是chunk_split()函數的功能,與str_split()的區別是str_split()是把字符串按照長度分割成數組,而chunk_split()則是用一個指定的特殊符按照長度分割成新的字符串.相當于 str_split()+implode()兩個函數的功能,同樣這個函數是不支持中文的,需要實現這樣的功能需要自定義函數,代碼如下:
- <?php
- $data = "e0ab71ab9ed24e627a24e7d65367936393cb3b39db9a9e84d65cd7a9254a4665";
- echo chunk_split($data, 30, "<br />");
- echo implode("<br />",str_split($data,30));
- //和chunk_split效果一樣
- ?>
支持中文的自定義chunk_split()函數,代碼如下:
- <?php
- //from Peter from dezzignz.com 05-Apr-2010 11:30 @ php.net
- function mbStringToArray ($str) {
- if (emptyempty($str)) return false;
- $len = mb_strlen($str);
- $array = array();
- for ($i = 0; $i < $len; $i++) {
- $array[] = mb_substr($str, $i, 1);
- }
- return $array;
- }
- function mb_chunk_split($str, $len, $glue) {
- if (emptyempty($str)) return false;
- $array = mbStringToArray ($str);
- $n = 0;
- $new = '';
- foreach ($array as $char) {
- if ($n < $len) $new .= $char;
- elseif ($n == $len) {
- $new .= $glue . $char;
- $n = 0;
- }
- $n++;
- }
- return $new;
- }
- $data = "e0ab你好4e627a24e7d65367936393cb3b39db9釣魚島a9e84d65cd7a9254a4665"; //開源代碼Vevb.com
- echo mb_chunk_split($data, 30, "<br />");
- ?>
PHP explode函數說明,這個函數我們經常會用到.
explode 函數:該函數所支持版本(PHP 4,PHP 5),通常是比 split() 更快的替代方便,如果不需要正則表達式的威力,則使用 explode() 更快,這樣就不會招致正則表達式引擎的浪費.
explode:使用一個字符串分割另一個字符串.
說明:array explode(string $delimiter,string $string [,int $limit ])
此函數返回由字符串組成的數組,每個元素都是 string 的一個子串,它們被字符串 delimiter 作為邊界點分割出來.
參數:delimiter 邊界上的分隔字符.
string:輸入的字符串.
limit:如果設置了 limit 參數并且是正數,則返回的數組包含最多 limit 個元素,而最后那個元素將包含 string 的剩余部分,如果 limit 參數是負數,則返回除了最后的 -limit 個元素外的所有元素如果 limit 是 0,則會被當做 1.
由于歷史原因,雖然 implode() 可以接收兩種參數順序,但是 explode() 不行,你必須保證 separator 參數在 string 參數之前才行.
返回值:此函數返回由字符串組成的 array,每個元素都是 string 的一個子串,它們被字符串 delimiter 作為邊界點分割出來.
如果 delimiter 為空字符串(""),explode() 將返回 FALSE,如果 delimiter 所包含的值在 string 中找不到,并且使用了負數的 limit,那么會返回空的 array,否則返回包含 string 單個元素的數組.
Report a bug,更新日志
版本 說明
5.1.0 支持負數的 limit
4.0.1 增加了參數 limit
Example #1 explode() 例子,PHP代碼:
- <?php
- // 示例 1
- $pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
- $pieces = explode(" ", $pizza);
- echo $pieces[0]; // piece1
- echo $pieces[1]; // piece2
- // 示例 2
- $data = "foo:*:1023:1000::/home/foo:/bin/sh";
- list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);
- echo $user; // foo
- echo $pass; // *
- ?>
Example #2 explode() return examples,PHP代碼如下:
- <?php
- /* A string that doesn't contain the delimiter will simply return a one-length array of the original string. */
- $input1 = "hello";
- $input2 = "hello,there";
- var_dump( explode( ',', $input1 ) );
- var_dump( explode( ',', $input2 ) );
- ?>
以上例程會輸出:
- array(1)
- (
- [0] => string(5) "hello"
- )
- array(2)
- (
- [0] => string(5) "hello"
- [1] => string(5) "there"
- )
Example #3 limit 參數的例子,PHP代碼如下:
- <?php
- $str = 'one|two|three|four';
- // 正數的 limit
- print_r(explode('|', $str, 2));
- // 負數的 limit(自 PHP 5.1 起)
- print_r(explode('|', $str, -1));
- ?>
- //以上例程會輸出:
- //開源代碼Vevb.com
- Array
- (
- [0] => one
- [1] => two|three|four
- )
- Array
- (
- [0] => one
- [1] => two
- [2] => three
- )
|
新聞熱點
疑難解答