当前位置:首页 > PHP教程 > php数组 > 列表

PHP实现合并两个有序数组的方法分析

发布:smiling 来源: PHP粉丝网  添加日期:2021-08-22 13:07:13 浏览: 评论:0 

这篇文章主要介绍了PHP实现合并两个有序数组的方法,结合实例形式分析了php针对数组的合并、遍历、排序、去重等常见操作技巧,需要的朋友可以参考下

本文实例讲述了PHP实现合并两个有序数组的方法,分享给大家供大家参考,具体如下:

  1. $arr1 = array(1,2,3,4,5,6,7,8); 
  2. $arr2 = array(3,4,5,7,9,10); 
  3. //方法1 
  4. function mergeOrderly1($arr1,$arr2){ 
  5.  $i=0;$j=0; 
  6.  $int = array(); 
  7.  while($i<count($arr1) && $j<count($arr2)){ 
  8.   $int[] = $arr1[$i]<$arr2[$j]?$arr1[$i++]:$arr2[$j++]; 
  9.  } 
  10.  while($i<count($arr1)){ 
  11.   $int[] = $arr1[$i++]; 
  12.  } 
  13.  while($j<count($arr2)){ 
  14.   $int[] = $arr2[$j++]; 
  15.  } 
  16.  //$int = array_merge($int,array_slice($arr1,$i)); 
  17.  //$int = array_merge($int,array_slice($arr2,$j)); 
  18.  return $int
  19. //方法2 
  20. function mergeOrderly2($arr1,$arr2){ 
  21.  $arr = array();//定义最终数组容器 
  22.  $arr2Num = count($arr2);//统计数组长度 
  23.  $arr1Num = count($arr1); 
  24.  $i1 = 0;//数组1 的循环标记 
  25.  $i2 = 0;//数组2 的循环标记 
  26.  while($i1 < $arr1Num || $i2 < $arr2Num){//是否还需要合并 
  27.   if($i1 < $arr1Num && $i2 < $arr2Num){//当两个数组都没有到达末尾,情况一 
  28.    if($arr1[$i1] > $arr2[$i2]){//需要比较数组1和数组2,小的放入目标数组,并且标记+1 
  29.     $arr[] = $arr2[$i2]; 
  30.     $i2++; 
  31.    }else
  32.     $arr[] = $arr1[$i1]; 
  33.     $i1++; 
  34.    } 
  35.   }elseif($i1 < $arr1Num && $i2 >= $arr2Num){//数组2 已经到达末尾,而数组1还为到达,情况二 
  36.    $arr[] = $arr1[$i1];//直接把数组1的内容插入到目标数组中 
  37.    $i1++; 
  38.   }elseif($i2 < $arr2Num && $i1 >= $arr1Num){//数组1已经到达末尾,而数组2还未到达,情况三 
  39.    $arr[] = $arr2[$i2];//直接把数组2的内容插入到目标数组中 
  40.    $i2++; 
  41.   } 
  42.  } 
  43.  return $arr
  44. print_r(mergeOrderly1($arr1,$arr2)); 
  45. print_r(mergeOrderly2($arr1,$arr2)); 

运行结果:

  1. Array 
  2.  [0] => 1 
  3.  [1] => 2 
  4.  [2] => 3 
  5.  [3] => 3 
  6.  [4] => 4 
  7.  [5] => 4 
  8.  [6] => 5 
  9.  [7] => 5 
  10.  [8] => 6 
  11.  [9] => 7 
  12.  [10] => 7 
  13.  [11] => 8 
  14.  [12] => 9 
  15.  [13] => 10 
  16. Array 
  17.  [0] => 1 
  18.  [1] => 2 
  19.  [2] => 3 
  20.  [3] => 3 
  21.  [4] => 4 
  22.  [5] => 4 
  23.  [6] => 5 
  24.  [7] => 5 
  25.  [8] => 6 
  26.  [9] => 7 
  27.  [10] => 7 
  28.  [11] => 8 
  29.  [12] => 9 
  30.  [13] => 10 

细心的读者应该发现了,合并后的数组并没有去重复,下面介绍一下数组合并后去重复的方法:

1. 单数组去重复

array_unique($arrTest)

2. 多数组去重复

array_keys(array_flip($arr1)+array_flip($arr2))

测试示例:

  1. $arr1 = array(1,2,3,4,5); 
  2. $arr2 = array(1,2,3,6,7); 
  3. $arr3 = array('0'=>1,'1'=>2,'2'=>3,'3'=>4,'4'=>5); 
  4. $arr4 = array('0'=>1,'1'=>2,'2'=>3,'3'=>6,'4'=>7); 
  5. $arr5 = array('0'=>1,'a'=>2,'b'=>3,'c'=>4,'4'=>5); 
  6. $arr6 = array('0'=>1,'a'=>2,'c'=>3,'d'=>6,'4'=>7); 
  7. var_dump(array_merge($arr1$arr2)); 
  8. var_dump($arr1+$arr2); 
  9. var_dump(array_keys(array_flip($arr1)+array_flip($arr2))); 
  10. echo '<br>'
  11. var_dump(array_merge($arr3$arr4)); 
  12. var_dump($arr3+$arr4); 
  13. var_dump(array_keys(array_flip($arr3)+array_flip($arr4))); 
  14. echo '<br>'
  15. var_dump(array_merge($arr5$arr6)); 
  16. var_dump($arr5+$arr6); 

运行结果:

  1. array(10) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(1) [6]=> int(2) [7]=> int(3) [8]=> int(6) [9]=> int(7) } array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) } array(7) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(6) [6]=> int(7) }  
  2. array(10) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(1) [6]=> int(2) [7]=> int(3) [8]=> int(6) [9]=> int(7) } array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) } array(7) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(6) [6]=> int(7) }  
  3. array(8) { [0]=> int(1) ["a"]=> int(2) ["b"]=> int(3) ["c"]=> int(3) [1]=> int(5) [2]=> int(1) ["d"]=> int(6) [3]=> int(7) } array(6) { [0]=> int(1) ["a"]=> int(2) ["b"]=> int(3) ["c"]=> int(4) [4]=> int(5) ["d"]=> int(6) }

Tags: PHP合并数组

分享到: