php json array_merge,PHP使用自定义方法实现数组合并示例

本文实例讲述了PHP使用自定义方法实现数组合并。分享给大家供大家参考,具体如下:

在PHP中提供了强大的数组功能,对于数组的合并也提供了两个方法:array_merge 和 array_merge_recursive

但对于我们千变万化的业务来说这些内置的方法并不完全能满足我们的要求

如我现在就遇到了数组合并这方面的问题,要求是这样的:

有两个二维数组,这两个数组大部分的健名是相同的,但有些健名可能并不存在于另一个数组中,现在需要我做的是将第二个数组中所有健值复制到第一个数组中(条件是:两个数组某个健名的值是相同的情况下)

显然内置的两个方法都不能满足要求(两个方法都只是将第二个数组中的健值复制到第一个对应的健上)

$ar1 = array("color"=> array("favorite"=>"red","name"=>"test"));

$ar2 = array("color"=> array("favorite"=>"green","code"=>"code"));

print_r (array_merge ($ar1, $ar2));

print_r(array_merge_recursive ($ar1, $ar2));

可以看到array_merge只是将每个第二个数组的值复制到第一个数组上而已,显然数组一favorite.name被数组二code给覆盖了,而array_merge_recursive不会覆盖掉相同的健名但一旦两个数组健名相同则它会创建一个新数组并将两个数组中值添加到新数组中

以下是我自定义的实现方法:

/**

* @Author: HTL

* @Description: 根据指定的健名将$ar2中的所有健值复制到$ar1对应的健值中

* @Return:$ar1

*/

function array_more_merge($ar1,$ar2,$key_name){

if(

!$ar1

|| !is_array($ar1)

|| count($ar1)<=0

|| !$ar2

|| !is_array($ar2)

|| count($ar2)<=0

|| !$key_name

|| strlen($key_name)<=0)

{

return $ar1;

}

/*不能使用for进行循环,因为如果数组中的索引不是连续的则使用for可能无法正确的完成循环

如 $a =

Array(

1 => Array("id" => 1 )

,8 => Array("id" => 2 )

,4 => Array("id" => 4 )

);

该数组数为3所以只能找到[1],而[8][4]在循环中不会进行处理,因为$i <=count($a)不成立
  */

for ($i=0; $i <=count($a) ; $i++) {

print_r($a[$i]);

}

foreach ($ar1 as $i=>$items) {

foreach ($ar2 as $key=>$item) {

if($ar2[$key][$key_name]==$ar1[$i][$key_name]){

$keys = array_keys($ar2[$key]);

foreach ($keys as $name) {

$ar1[$i][$name] = $ar2[$key][$name];

}

}

}

}

return $ar1;

}

$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"}}';

$ar1 = json_decode($ar1,true);

$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"}}';

$ar2 = json_decode($ar2,true);

echo "array_merge_recursive:";

print_r(array_merge_recursive($ar1,$ar2));

echo "array_merge:";

print_r(array_merge($ar1,$ar2));

echo "array_more_merge:";

print_r($this->array_more_merge($ar1,$ar2,"id"));

die();

运行结果如下图所示:

e1cccc396c66a7e6940f9a8b0694ad9a.png

希望本文所述对大家PHP程序设计有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值