利用PHP分割字串函數把字串成分割數組

來源:互聯網
上載者:User

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
)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.