PHP数组的几个操作,求并集,交集,差集,数组与字符串的相互转换及数组去重

PHP中如果我想要对两个数组进行如并集、交集和差集操作,我们可直接使用php自带的函数来操作如array_merge(),array_intersect(),array_diff().

计算数组的合并 array_merge与“+”的区别

array_merge() 函数把两个或多个数组合并为一个数组。

如果键名有重复,该键的键值为最后一个键名对应的值(后面的覆盖前面的),如果数组是数字索引的,则键名会以连续方式重新索引。

注释:如果仅仅向 array_merge() 函数输入了一个数组,且键名是整数,则该函数将返回带有整数键名的新数组,其键名以 0 开始进行重新索引.代码如下:

  1. $a = array(1 => 'a', 'b', 'c'); 
  2. $b = array(1 => 'aa', 2, 'c'); 
  3. $union = array_merge($a, $b); 
  4. $plus = $a + $b; 
  5. print_r($union); 
  6. print_r($plus); 
  7. //结果依次为: 
  8. Array 
  9. [0]=> a 
  10. [1]=> b 
  11. [2]=> c 
  12. [3]=> aa 
  13. [4]=> 2 
  14. [5]=> c 
  15. Array 
  16. [1] => a 
  17. [2] => b 
  18. [3] => c 

要合并的两个数组中有相同的字符串键的时候,使用array_merge()会覆盖掉原来的值,而使用“+”合并数组则会和用“+”号合并数组相同数字键一样把最先出现的值作为最终结果返回,如下例:

  1. $a2 = array('str' => 'a', 'b', 'c'); 
  2. $b2 = array('str' => 'aa', 2, 'c'); 
  3. $union2 = array_merge($a2, $b2); 
  4. $plus2 = $a2 + $b2; 
  5. print_r($union2); 
  6. print_r($plus2); 
  7. //结果依次为: 
  8. Array 
  9. [str] => aa 
  10. [0] => b 
  11. [1] => c 
  12. [2] => 2 
  13. [3] => c 
  14. Array 
  15. [str] => a 
  16. [0] => b 
  17. [1] => c 

注:如果想用array_merge合并两个数组,返回结果可能还会有相同的元素,这时候可以用array_unique()把相同的元素去掉

计算数组的交集

array_intersect() 函数返回两个或多个数组的交集数组,结果数组包含了所有在被比较数组中,也同时出现在所有其他参数数组中的值,键名保留不变,注释:仅有值用于比较,代码如下:

  1. $a = array('jpg','png','gif','bmp'); 
  2. $b = array('JPG','txt','docx','bmp'); 
  3. $intersection = array_intersect($a, $b); 

还可以通过函数,获取自己想要的(比如元素不区分大小写),代码如下:

  1. $intersection2 = array_intersect(array_map('strtolower',$a), array_map('strtolower',$b)); 
  2. print_r($intersection); 
  3. print_r($intersection2); 
  4. //结果依次为: 
  5. Array 
  6. [3] => bmp 
  7. Array ( 
  8. [0] => jpg 
  9. [3] => bmp 

计算数组的差集,代码如下:

  1. $old = array('jpg','png','gif','bmp'); 
  2. $new = array('JPG','txt','docx','bmp'); 
  3. $difference = array_diff($old, $new); 

注:返回结果的元素包含$old的元素,不包括$new的元素

print_r($difference);

结果为:

  1. Array 
  2. [0] => jpg 
  3. [1] => png 
  4. [2] => gif 

也可以用函数先进行处理,再计算差集

array_diff() 函数返回两个数组的差集数组。该数组包括了所有在被比较的数组中,但是不在任何其他参数数组中的键值,在返回的数组中,键名保持不变。

语法:array_diff(array1,array2,array3...)

代码如下:

  1. $difference = array_diff(array_map('strtolower',$old), 
  2. array_map('strtolower',$new)); 


数组转换为字符串:

<?php
$arr = array('Hello','World!','I','love','Shanghai!');
echo implode(" ",$arr);
?>

字符串转换为数组:

<?php
$str="1432532 ,4444";

 $arr = explode(",",$str);
 echo count($arr)."</br>";
 
print_r($arr);
?>

数组元素值去重

<?php
$a=array("a"=>"red","b"=>"green","c"=>"red");
print_r(array_unique($a));
?>


针对有空格的字符串转换成无空格的字符串

<?php
$str="1432532 ,67878";

 $arr = explode(",",$str);
 //echo count($arr)."</br>";
 
 $str_u='';
 
for($i=0;$i<count($arr);$i++)
{
    
    $str_u .=trim($arr[$i]).',';
    
    }
 echo $str_u;

?>

posted @ 2017-01-09 16:02  思风雨  阅读(522)  评论(0编辑  收藏  举报