PHP 數組和字符串互相轉換實現方法

PHP 中由於數組和字符串這兩種變量類型是如此常用,以至於 PHP 具有兩個函數,可以在字符串和數組之間互相進行轉換
代碼如下:

$array=explode(separator,$string); 
$string=implode(glue,$array);

使用和理解這兩個函數的關鍵之處是分隔符(separator)和膠合符(glue)關係。當把一個數組轉換成一個字符串時,將會設置膠合符——將被插入到生成字符串中的數組值之間的字符或代碼。

相反,當把字符串轉換成數組時,要指定分隔符,它用於標記什麼應該變成獨立數組元素。例如,以字符串開始:
  $s1='Mon-Tue-Wed-Thu-Fri';
  $days_array=explode('-',$s1);
  $days_array 變量現在是一個有5個元素的數組,其元素 Mon 的索引爲0,Tue 的索引爲1,等等。
  $s2=implode(',',$days_array);
  $s2 
變量現在是一個用逗號分隔的一個星期中各天的列表:Mon,Tue,Wed,Thu,Fri

例子 1. explode() 示例 

複製代碼代碼如下:

<?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; // * 
?> 

例子 2. limit 參數示例 

複製代碼代碼如下:

<?php 
$str = 'one|two|three|four'; 
// 正數的 limit 
print_r(explode('|', $str, 2)); 
// 負數的 limit 
print_r(explode('|', $str, -1)); 
?> 

以上示例將輸出: 
Array 
[0] => one 
[1] => two|three|four 
Array 
[0] => one 
[1] => two 
[2] => three 

注: 本函數可安全用於二進制對象。


在php中字符串分割有很多,如有str_split,explode,chunk_split()函數,下面我給大家分別整理了一些實例.
str_split() 可以將字符串按照需要的長度做分割,但是如果字符串中有UTF-8編碼的中文出現,就會出現亂碼,如果需要實現支持中文的按照長度分割字符串的功能就需要額外處理,代碼如下:
  1. <?php  
  2. $str = 'hello world';  
  3. $arr = str_split($str);  
  4. print_r($arr);  
  5. /*  
  6. Array  
  7. (  
  8. [0] => h  
  9. [1] => e   
  10. [2] => l      
  11. [3] => l  
  12. [4] => o  
  13. [5] =>  
  14. [6] => w  
  15. [7] => o  
  16. [8] => r  
  17. [9] => l  
  18. [10] => d  
  19. )  
  20. */ 
  21. $arr = str_split($str,2);  
  22. print_r($arr);  
  23. /*  
  24. Array  
  25. (  
  26. [0] => he  
  27. [1] => ll  
  28. [2] => o  
  29. [3] => wo  
  30. [4] => rl  
  31. [5] => d  
  32. )  
  33.    
  34. */ 
  35. ?> 
支持UTF-8編碼的中文的按照長度分割字符串函數,代碼如下:
  1. <?php  
  2. /**  
  3. * @version $Id: str_split.php 10381 2008-06-01 03:35:53Z pasamio $  
  4. * @package utf8  
  5. * @subpackage strings  
  6. */ 
  7. function utf8_str_split($str, $split_len = 1)  
  8. {  
  9.     if (!preg_match('/^[0-9]+$/', $split_len) || $split_len < 1)  
  10.         return FALSE;  
  11.    
  12.     $len = mb_strlen($str, 'UTF-8');  
  13.     if ($len <= $split_len)  
  14.         return array($str);  
  15.    
  16.     preg_match_all('/.{'.$split_len.'}|[^x00]{1,'.$split_len.'}$/us', $str, $ar);  
  17.    
  18.     return $ar[0];  
  19. }  
  20.    
  21. $str = 'hello 你好';  
  22.    
  23. $arr = utf8_str_split($str);  
  24. print_r($arr);  
  25. /*  
  26. Array  
  27. [0] => h  
  28. [1] => e  
  29. [2] => l  
  30. [3] => l  
  31. [4] => o  
  32. [5] =>  
  33. [6] => 你  
  34. [7] => 好  
  35. )  
  36. */ 
  37. ?> 
主要是chunk_split()函數的功能,與str_split()的區別是str_split()是把字符串按照長度分割成數組,而chunk_split()則是用一個指定的特殊符按照長度分割成新的字符串.相當於 str_split()+implode()兩個函數的功能,同樣這個函數是不支持中文的,需要實現這樣的功能需要自定義函數,代碼如下:
  1. <?php  
  2.     $data = "e0ab71ab9ed24e627a24e7d65367936393cb3b39db9a9e84d65cd7a9254a4665";  
  3.     echo chunk_split($data, 30, "<br />");  
  4.     echo implode("<br />",str_split($data,30)); 
  5. //和chunk_split效果一樣  
  6. ?> 
支持中文的自定義chunk_split()函數,代碼如下:
  1. <?php  
  2. //from Peter from dezzignz.com 05-Apr-2010 11:30 @ php.net  
  3.    
  4. function mbStringToArray ($str) {  
  5.     if (emptyempty($str)) return false;  
  6.     $len = mb_strlen($str);  
  7.     $array = array();  
  8.     for ($i = 0; $i < $len; $i++) {  
  9.         $array[] = mb_substr($str, $i, 1);  
  10.     }  
  11.     return $array;  
  12. }  
  13.    
  14. function mb_chunk_split($str, $len, $glue) {  
  15.     if (emptyempty($str)) return false;  
  16.     $array = mbStringToArray ($str);  
  17.     $n = 0;  
  18.     $new = '';  
  19.     foreach ($array as $char) {  
  20.         if ($n < $len) $new .= $char;  
  21.         elseif ($n == $len) {  
  22.             $new .= $glue . $char;  
  23.             $n = 0;  
  24.         }  
  25.         $n++;  
  26.     }  
  27.     return $new;  
  28. }  
  29.    
  30. $data = "e0ab你好4e627a24e7d65367936393cb3b39db9釣魚島a9e84d65cd7a9254a4665"; //開源代碼phpfensi.com 
  31. echo mb_chunk_split($data, 30, "<br />");  
  32. ?> 
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代碼:
  1. <?php        
  2.     // 示例 1        
  3.     $pizza  = "piece1 piece2 piece3 piece4 piece5 piece6";        
  4.     $pieces = explode(" ", $pizza);        
  5.     echo $pieces[0]; // piece1        
  6.     echo $pieces[1]; // piece2     
  7.     // 示例 2        
  8.     $data = "foo:*:1023:1000::/home/foo:/bin/sh";        
  9.     list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);        
  10.     echo $user; // foo        
  11.     echo $pass; // *  
  12. ?> 
Example #2 explode() return examples,PHP代碼如下:
  1. <?php        
  2.     /* A string that doesn't contain the delimiter will simply return a one-length array of the original string. */       
  3.     $input1 = "hello";        
  4.     $input2 = "hello,there";        
  5.     var_dump( explode( ',', $input1 ) );      
  6.     var_dump( explode( ',', $input2 ) );        
  7.            
  8.     ?> 
以上例程會輸出:
  1. array(1) 
  2.     [0] => string(5) "hello" 
  3. array(2) 
  4.     [0] => string(5) "hello" 
  5.     [1] => string(5) "there" 
Example #3 limit 參數的例子,PHP代碼如下:
  1. <?php        
  2.     $str = 'one|two|three|four';        
  3.            
  4.     // 正數的 limit        
  5.     print_r(explode('|', $str, 2));        
  6.            
  7.     // 負數的 limit(自 PHP 5.1 起)        
  8.     print_r(explode('|', $str, -1));        
  9.     ?>      
  10. //以上例程會輸出: 
  11. //開源代碼phpfensi.com 
  12. Array 
  13.     [0] => one 
  14.     [1] => two|three|four 
  15. Array 
  16.     [0] => one 
  17.     [1] => two 
  18.     [2] => three 
  19. )
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章