您的位置:首页 > 编程语言 > PHP开发

PHP 数组和字符串互相转换实现方法

2016-08-30 15:31 1001 查看
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 


注: 本函数可安全用于二进制对象。

来源: http://www.jb51.net/article/35077.htm

在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"; //开源代码phpfensi.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));        

    ?>      

//以上例程会输出: 

//开源代码phpfensi.com 

Array 



    [0] => one 

    [1] => two|three|four 



Array 



    [0] => one 

    [1] => two 

    [2] => three 

)

来源: http://www.php1.cn/Content/LiYong_PHP_FenGeZiFuChuanHanShuBaZiFuChuanChengFenGeShuZu.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: