PHP - 合并阵列 [英] PHP - merging arrays

查看:129
本文介绍了PHP - 合并阵列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  $ ARR1 =阵列(
    '名称',
    '日期'=>阵列(默认=>'2009-06-13','格式'=>短),
    '地址',
    拉链code'=>阵列(默认=> 12345,隐藏= GT;真)
);$ ARR2 =阵列(
    '名称',
    '语言',
    '日期'=>阵列('格式'=>'长','隐藏'= GT;真)
    拉链code'=>阵列('隐藏'=>假)
);

下面是所期望的结果:

  $最终=阵列(
    '名称',
    '日期'=>阵列(默认=>'2009-06-13','格式'=>'长','隐藏'= GT;真)
    拉链code'=>阵列(默认=> 12345,隐藏= GT;假)
);


  • 仅从$ ARR2(即同时存在于$ ARR1)的元素被用来

  • 每个元素的属性被合并

  • 如果一个共同的元素(例如拉链code)共享一个属性(例如隐藏),然后从$ ARR2属性接受precedence

什么是解决这个问题的一些好的方法?

先谢谢了。

编辑:我试着蹒跚的东西一起......批评的欢迎:

  $ new_array = array_intersect_key($ ARR2,$ ARR1);的foreach($ new_array为$关键=> $ VAL)
{
    如果(is_array($ ARR1 [$关键]))
    {
        如果(is_array($ VAL))
        {
            $ new_array [$关键] = array_merge($ VAL,$ ARR1 [$关键]);
        }
        其他
        {
            $ new_array [$关键] = $ ARR1 [$关键];
        }
    }
}


解决方案

您已经接近

  $ newArr = array_intersect_key($ ARR1,$ ARR2);
的foreach($ newArr为$关键=> $ VAL)
{
    如果(is_array($ VAL))
    {
    $ newArr [$关键] = array_merge($ ARR1 [$关键],$ ARR2 [$关键]);
    }
}

修改
只是不得不改变array_intersect为array_intersect_key

$arr1 = array(
    'name',
    'date' => array('default' => '2009-06-13', 'format' => 'short'),
    'address',
    'zipcode' => array('default' => 12345, 'hidden' => true)
);

$arr2 = array(
    'name',
    'language',
    'date' => array('format' => 'long', 'hidden' => true),
    'zipcode' => array('hidden' => false)
);

Here's the desired result:

$final = array(
    'name',
    'date' => array('default' => '2009-06-13', 'format' => 'long', 'hidden' => true),
    'zipcode' => array('default' => 12345, 'hidden' => false)
);

  • Only the elements from $arr2 (that also exist in $arr1) are used
  • Each element's attributes are merged
  • If a common element (e.g. zipcode) shares an attribute (e.g. hidden), then the attribute from $arr2 takes precedence

What are some good approaches for solving this problem?

Thanks in advance.

EDIT: I tried to hobble something together... critiques welcomed:

$new_array = array_intersect_key($arr2, $arr1);

foreach ($new_array as $key => $val)
{
    if (is_array($arr1[$key]))
    {
        if (is_array($val))
        {
            $new_array[$key] = array_merge($val, $arr1[$key]);
        }
        else
        {
            $new_array[$key] = $arr1[$key];
        }
    }
}

解决方案

You were close

$newArr = array_intersect_key($arr1, $arr2);
foreach ($newArr as $key => $val)
{
    if (is_array($val))
    {
    	$newArr[$key] = array_merge($arr1[$key], $arr2[$key]);
    }
}

Edit Just had to change the array_intersect to array_intersect_key

这篇关于PHP - 合并阵列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆