码迷,mamicode.com
首页 > 编程语言 > 详细

PHP 自定义方法实现数组合并

时间:2016-04-21 15:04:21      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

在PHP中提供了强大的数组功能,对于数组的合并也提供了两个方法:array_merge 和 array_merge_recursive
但对于我们千变万化的业务来说这些内置的方法并不完全能满足我们的要求
如我现在就遇到了数组合并这方面的问题,要求是这样的:
有两个二维数组,这两个数组大部分的健名是相同的
但有些健名可能并不存在于另一个数组中,现在需要我做的是将第二个数组中所有健值复制到第一个数组中(条件是:两个数组某个健名的值是相同的情况下)
显然内置的两个方法都不能满足要求(两个方法都只是将第二个数组中的健值复制到第一个对应的健上)
  1. $ar1 = array("color" => array("favorite" => "red","name"=>"test"));
  2. $ar2 = array("color" => array("favorite" => "green","code"=>"code"));
  3. print_r (array_merge ($ar1, $ar2));
  4. print_r(array_merge_recursive ($ar1, $ar2));
可以看到array_merge只是将每个第二个数组的值复制到第一个数组上而已,显然数组一favorite.name被数组二code给覆盖了
而array_merge_recursive不会覆盖掉相同的健名但一旦两个数组健名相同则它会创建一个新数组并将两个数组中值添加到新数组中
技术分享
以下是我自定义的实现方法:
  1. /**
  2. * @Author: -HTL
  3. * @Email: Huangyuan413026@163.com
  4. * @DateTime: 2016-04-21 12:01:51
  5. * @Description: 根据指定的健名将$ar2中的所有健值复制到$ar1对应的健值中
  6. * @Return:$ar1
  7. */
  8. function array_more_merge($ar1,$ar2,$key_name){
  9. if(
  10. !$ar1
  11. || !is_array($ar1)
  12. || count($ar1)<=0
  13. || !$ar2
  14. || !is_array($ar2)
  15. || count($ar2)<=0
  16. || !$key_name
  17. || strlen($key_name)<=0)
  18. {
  19. return $ar1;
  20. }
  21. //不能使用for进行循环,因为如果数组中的索引不是连续的则使用for可能无法正确的完成循环
  22. //如 $a = 
  23.           Array(
  24. 1 => Array("id" => 1 ) ,8 => Array("id" => 2 ) ,4 => Array("id" => 4 ) );
  25. //该数组数为3所以只能找到[1],而[8][4]在循环中不会进行处理,因为$i <=count($a)不成立
  26. for ($i=0; $i <=count($a) ; $i++) { print_r($a[$i]); }
  27. foreach ($ar1 as $i=>$items) {
  28. foreach ($ar2 as $key=>$item) {
  29. if($ar2[$key][$key_name]==$ar1[$i][$key_name]){
  30. $keys = array_keys($ar2[$key]);
  31. foreach ($keys as $name) {
  32. $ar1[$i][$name] = $ar2[$key][$name];
  33. }
  34. }
  35. }
  36. }
  37. return $ar1;
  38. }
  39. $ar1 = ‘{"1":{"cost":"1","id":"1","total_price":"5"},"2":{"cost":"2","id":"2","total_price":"10"},"4":{"cost":"4","id":"4","total_price":"20"}}‘;
  40. $ar1 = json_decode($ar1,true);
  41. $ar2 = ‘{"1":{"cost":"1","id":"1","total_price":"5"},"2":{"cost":"20","id":"2","total_price":"100"},"4":{"cost":"40","id":"4","total_price":"200"}}‘;
  42. $ar2 = json_decode($ar2,true);
  43. echo "array_merge_recursive:";
  44. print_r(array_merge_recursive($ar1,$ar2));
  45. echo "array_merge:";
  46. print_r(array_merge($ar1,$ar2));
  47. echo "array_more_merge:";
  48. print_r($this->array_more_merge($ar1,$ar2,"id"));
  49. die();

技术分享




PHP 自定义方法实现数组合并

标签:

原文地址:http://www.cnblogs.com/huangtailang/p/2ef12ad90f47280ce27c433ec2b2ab49.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!