如何根据PHP中的值合并两个数组?

时间:2014-08-10 05:15:24

标签: php mysql sql arrays codeigniter

我有两个数组,我需要将它们合并在一起!!

数组1

Array
(
  [0] => Array
      (
        [brand] => CARTIER
        [amount_2014] => 136476
      )

  [1] => Array
    (
        [brand] => TIFFANY & CO.
        [amount_2014] => 22000
    )
  [2] => Array
    (
        [brand] => Test
        [amount_2014] => 33000
    )


 )

数组2

   Array
 (
   [0] => Array
    (
        [brand] => CARTIER
        [amount_2013] => 22052
    )
   [1] => Array
    (
        [brand] => Test
        [amount_2013] => 3313
    )

 )

我需要结果数组:

 Array
   (
    [0] => Array
      (
        [brand] => CARTIER
        [amount_2014] => 136476
        [amount_2013] => 22052
      )

    [1] => Array
      (
        [brand] => TIFFANY & CO.
        [amount_2014] => 22000
        [amount_2013] => 0
    )

   [2] => Array
      (
        [brand] => Test
        [amount_2014] => 33000
        [amount_2013] => 3313
    )

 )

因此,对于每个[品牌],我需要[amount_2014]& [amount_2013],如果任何一个不存在,那么我需要它的值为0;

我正在为这个项目使用CodeIgniter,我只有一个表格,其中包括字段(品牌,金额,年份),我发出两个查询以获取2013年的金额总和。 2014。

(我正在使用array_merge和array_combine但在这种情况下没有用,如果任何人可以帮助查询,那么它也非常有用)。

4 个答案:

答案 0 :(得分:3)

试试这个:

function cars_array_merge()
{
    $arrays = func_get_args();
    foreach ($arrays as &$array)
    {
        $new_arr = array();
        foreach ($array as $value)
        {
            $brand = $value['brand'];
            unset($value['brand']);
            $new_arr[$brand] = $value;
        }
        $array = $new_arr;
    }
    $arrays = call_user_func_array('array_merge_recursive', $arrays);
    foreach ($arrays as $brand => &$array)
        $array['brand'] = $brand;
    return array_values($arrays);
}

// testing

$arr1 = [
    [ 'brand' => 'CARTIER', 'mount_2014' => 136476 ],
    [ 'brand' => 'TIFFANY & CO.', 'mount_2014' => 22000 ]
];

$arr2 = [
    [ 'brand' => 'CARTIER', 'mount_2013' => 22052 ]
];

print_r(cars_array_merge($arr1, $arr2));

输出:

Array
(
    [0] => Array
        (
            [mount_2014] => 136476
            [mount_2013] => 22052
            [brand] => CARTIER
        )

    [1] => Array
        (
            [mount_2014] => 22000
            [brand] => TIFFANY & CO.
        )
)

答案 1 :(得分:1)

<?php

for ($i = 0, $max = count($arr1); $i < $max; ++$i) {
    $arr1[$i]['amount_2013'] = isset($arr2[$i]['amount_2013']) ? $arr2[$i]['amount_2013'] : 0;
}

答案 2 :(得分:1)

$merge = array_merge($arr1, $arr2);
$temp = $merge;
$newArr = array(); $key_array = array();
foreach($merge as $key=>$val){
    $b = $val['brand'];
    $a1 = isset($val['amount_2013']) ? $val['amount_2013'] : 0;
    $a2 = isset($val['amount_2014']) ? $val['amount_2014'] : 0;
    unset($temp[$key]);
    foreach($temp as $k=>$values){
        if($values['brand'] == $b){
            if($a1 == 0){
                $a1 = isset($values['amount_2013']) ? $values['amount_2013'] : 0;
            }
            if($a2 == 0){
                $a2 = isset($values['amount_2014']) ? $values['amount_2014'] : 0;
            }
            unset($temp[$k]);
        }
    }
    if(!in_array($b, $key_array))
    {
        $newArr[] = array('brand' => $b, 'amount_2014' => $a2, 'amount_2013' => $a1);
    }
    $key_array[] = $b;
}
print_r($newArr);

答案 3 :(得分:0)

这就是我使用的:

<?php
$arr1 = array(0=>array("brand"=>"CARTIER","amount_2014"=>136476), 1=>array("brand"=>"tiffany","amount_2014"=>22000)); 
$arr2 = array(0=>array("brand"=>"CARTIER","amount_2013"=>22000));

foreach ($arr2 as $key=>$value){

if( $value["brand"] == "CARTIER")
{
$arr1[0]["amount_2013"] = $value["amount_2013"];
$arr1[1]["amount_2013"] = 0;
}
else
{
$arr1[1]["amount_2013"] = $value["amount_2013"];
$arr1[0]["amount_2013"] = 0;
}

}

print_r($arr1);
?>