如何在PHP中合并2个关联数组?

时间:2010-09-22 17:26:45

标签: php merge associative-array

示例:

$arr1 = array('a' => "1", 'b' => "2", 'c' => "3", 'z' => "4");
$arr2 = array('a' => "9", 'b' => "8", 'c' => "7", 'd' => "6", 'e' => "5");

输出:

$result = array('a' => array( 'f1' => "1", 'f2' => "9"),
              'b' => array( 'f1' => "2", 'f2' => "8"),
              'c' => array( 'f1' => "3", 'f2' => "7"),
              'd' => array( 'f1' => "0", 'f2' => "6"),
              'e' => array( 'f1' => "0", 'f2' => "5"),
              'z' => array( 'f1' => "4", 'f2' => "0"),);

$ arr1的大小可以是'>','<'或'='大小$ arr2

4 个答案:

答案 0 :(得分:3)

我想是这样,

$arr1 = array('a' => "1", 'b' => "2", 'c' => "3", 'z' => "4");

$arr2 = array('a' => "9", 'b' => "8", 'c' => "7", 'd' => "6", 'e' => "5");


foreach($arr1 as $key => $value){
    $a[$key]['f1'] = $value;
}

foreach($arr2 as $key => $value){
    $b[$key]['f2'] = $value;
}

$c = array_merge_recursive($a, $b);
foreach($c as $key => $value){
    $result[$key]['f1'] = (array_key_exists('f1', $value)) ? $value['f1']: 0;
    $result[$key]['f2'] = (array_key_exists('f2', $value)) ? $value['f2']: 0;
}

echo "<pre>".print_r ($result, true);

输出:

Array
(
    [a] => Array
        (
            [f1] => 1
            [f2] => 9
        )

    [b] => Array
        (
            [f1] => 2
            [f2] => 8
        )

    [c] => Array
        (
            [f1] => 3
            [f2] => 7
        )

    [z] => Array
        (
            [f1] => 4
            [f2] => 0
        )

    [d] => Array
        (
            [f1] => 0
            [f2] => 6
        )

    [e] => Array
        (
            [f1] => 0
            [f2] => 5
        )

)

答案 1 :(得分:1)

array_merge_recursive()应该有效:http://php.net/manual/en/function.array-merge-recursive.php

否则它很简单就行了几行:(除非你真的需要“fn”索引。)

function my_merge(){

    $result = array();
    foreach(func_get_args() as $a)
        foreach($a as $index => $value)
            $result[$index][] = $value;         

}

答案 2 :(得分:0)

试试这个:

$keys = array_unique(array_merge(array_keys($arr1), array_keys($arr2)));
$values = array_map(function($key) use ($arr1, $arr2) {
    return array('f1' => isset($arr1[$key]) ? $arr1[$key] : "0",
                 'f2' => isset($arr2[$key]) ? $arr2[$key] : "0"); }
    , $keys);
$result = array_combine($keys, $values);
var_dump($result);

一些解释:

  • 首先获取两个阵列的所有唯一键的数组$keys
  • 然后,为每个键生成相应的值数组。
  • 最后组合了键数组和值数组。

但目前这只适用于两个阵列。


编辑这是一个适用于任意数量的数组的文件:

$arrays = array($arr1, $arr2);
$keys = array_unique(call_user_func_array('array_merge', array_map('array_keys', $arrays)));
$values = array_map(function($key) use ($arrays) {
    return array_combine(array_map(function($key) {
        return 'f'.($key+1);
    }, array_keys($arrays)),
    array_map(function($array) use ($key) {
        return isset($array[$key]) ? $array[$key] : "0";
    }, $arrays));
}, $keys);
$result = array_combine($keys, $values);
var_dump($result);

一些解释:

  • 将所有数组放入数组$arrays
  • 对于$arrays中的每个数组,在其上调用array_keys以获取密钥,合并这些数组并获取所有唯一密钥的数组$keys
  • 对于$keys中的每个键,检查数组$arrays数组中是否存在该键。
  • 合并键和值。

答案 3 :(得分:0)

$arr1 = array('a' => "1", 'b' => "2", 'c' => "3", 'z' => "4");

$arr2 = array('a' => "9", 'b' => "8", 'c' => "7", 'd' => "6", 'e' => "5");

function combineArray($arr1, $arr2) {
    if (is_array($arr1) && is_array($arr2)) {
        $rArr = array();
        $steps = max ( count($arr1),count($arr2));
     $ak1 = array_keys($arr1);
     $ak2 = array_keys($arr2);

        for ($i=0;$i<$steps;$i++) {
                if (!isset($rArr[$i])) $rArr[$i]=array();
                $rArr[$i]['f1'] = (isset($arr1[$ak1[$i]])) ? $arr1[$ak1[$i]]: '0';
                $rArr[$i]['f2'] = (isset($arr2[$ak2[$i]])) ? $arr2[$ak2[$i]]: '0';
        }
        return $rArr;

    }else {
        return false;
    }
}

echo "<pre>".print_r (combineArray($arr1, $arr2),true);

可能有效:)