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 (empty($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 (empty($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"; echo mb_chunk_split($data, 30, "<br />"); ?> |
PHP explode函數說明,這個函數我們經常會用到
explode 函數
該函數所支援版本(PHP 4, PHP 5),通常是比 split() 更快的替代方案。如果不需要Regex的威力,則使用 explode() 更快,這樣就不會招致Regex引擎的浪費。
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)); ?> |
以上常式會輸出:
Array
(
[0] => one
[1] => two|three|four
)
Array
(
[0] => one
[1] => two
[2] => three
)