将不同的多个数组合并为单个数组

时间:2012-12-08 04:37:48

标签: php arrays codeigniter

现在变得越来越难了。我有这样的查询结果:

结果=数组(

A = array(
        [a]=>'1',
        [b] =>'2',
     );

B = array(
        [a] =>'1',
        [b] =>'3',
     );

C = array(
        [a] =>'1',
        [b] =>'4',
     );

**and more...**

);

那么如何将它们合并为一个这样的数组:

结果=数组(

     Z = array(

        [a] =>'1',
        [b] => array(

               [0] =>'2',
               [1] =>'3',
               [2] =>'4',
        );

     );

);

谢谢你,并为我糟糕的演讲感到抱歉。

3 个答案:

答案 0 :(得分:2)

您可以在PHP Manual

中查看array_merge函数

答案 1 :(得分:1)

如果您计划只在键(字符串,数字等)中使用原始值,这将起作用:

<?php

function array_combine_keys($a, $b) {
    $c = $a;
    foreach ($b as $k=>$v) {
        // Value can be only primitive, not an array itself
        if (isset($a[$k]) && $a[$k] !== $v) {
            $c[$k] = array($a[$k], $v);
        } else {
            $c[$k] = $v;
        }
    }
    return $c;
}

$a = array('a' => '1', 'b' => '2');
$b = array('a' => '1', 'b' => '3', 'c' => '5');

var_dump(array_combine_keys($a, $b));

?>

array(3) {
  ["a"]=>
  string(1) "1"
  ["b"]=>
  array(2) {
    [0]=>
    string(1) "2"
    [1]=>
    string(1) "3"
  }
  ["c"]=>
  string(1) "5"
}

更通用的方法是允许数组中的数组,并确保键始终是数组 - 这意味着我们不需要额外的逻辑来检查键是数组还是不是数组在遍历结果时。 (+)是两个数组的并集。

<?php

function array_combine_keys($a, $b) {
    $c = $a;
    foreach ($b as $k=>$v) {
        if (!is_array($v)) {
            $v = array($v);
        }
        if (isset($a[$k])) {
            $av = $a[$k];
            if (!is_array($av)) {
                $av = array($av);
            }
            $c[$k] = $av + $v;
        } else {
            $c[$k] = $v;
        }
    }
    return $c;
}

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

var_dump(array_combine_keys($a, $b));

?>

array(3) {
  ["a"]=>
  array(1) {
    [0]=>
    string(1) "1"
  }
  ["b"]=>
  array(2) {
    [0]=>
    string(1) "2"
    [1]=>
    string(1) "4"
  }
  ["c"]=>
  array(1) {
    [0]=>
    string(1) "5"
  }
}

答案 2 :(得分:1)

我不知道你为什么keep asking the same question,但这是我对你问题的回答。

$result = array_merge_recursive($a, $b, $c);
foreach($result as $k => $v) $result[$k] = array_unique($v);
print_r($result);
相关问题