Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中根据值合并两个数组?_Php_Mysql_Sql_Arrays_Codeigniter - Fatal编程技术网

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

如何在PHP中根据值合并两个数组?,php,mysql,sql,arrays,codeigniter,Php,Mysql,Sql,Arrays,Codeigniter,我有两个数组,我需要将它们合并在一起 阵列1 Array ( [0] => Array ( [brand] => CARTIER [amount_2014] => 136476 ) [1] => Array ( [brand] => TIFFANY & CO. [amount_2014] => 22000 ) [2] => Arr

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

阵列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\u merge和array\u combine,但在这种情况下对我没有用,如果有人可以帮助查询,那么它也非常有用)。

试试这个:

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.
        )
)
试试这个:

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.
        )
)
这就是我使用的:

<?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);
?>

这是我使用的:

<?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);
?>



No-mate它不起作用了,请重新检查问题。No-mate它不起作用了,请重新检查问题。很抱歉让您失望,但您一开始就错了:使用CodeIgniter的第一个错误;第二:有2个SQL查询;第三种可能:错误的数据库模式?抱歉@CSᵠ 但这就是我现在能做的,如果你能帮我写一个好的SQL查询,所有其他的都可以,这可能会帮助你分享你的db模式和你的2个查询Hello@CSᵠ, 请在pastbin()中查找查询和DB模式,很抱歉让您失望,但您开始时走错了路:第一个错误是使用CodeIgniter;第二:有2个SQL查询;第三种可能:错误的数据库模式?抱歉@CSᵠ 但这就是我现在能做的,如果你能帮我写一个好的SQL查询,所有其他的都可以,这可能会帮助你分享你的db模式和你的2个查询Hello@CSᵠ, 请在pastbin()中找到查询和DB模式mate它正在工作但没有按我需要的方式工作,我需要检查品牌,如果品牌匹配,则只添加值,否则它是zeromate它正在工作但没有按我需要的方式工作,我需要检查品牌,如果品牌匹配,则只添加值,否则它是zeromate谢谢你,mate,谢谢你的尝试,但它不是正确的。@Bukky,这是有效的,以下是输出:数组([0]=>Array([brand]=>CARTIER[amount\u 2014]=>136476[amount\u 2013]=>22000)[1]=>Array([brand]=>tiffany[amount\u 2014]=>22000]是的@charles,是的,你的代码是正确的,但这不是我需要的方式,我不能每次都检查这个品牌,非常感谢你的关注,请参考这个问题的正确答案,你会了解更多。谢谢你,伙计,谢谢你的尝试,但这不是正确的一个。@Bukky,这很有效,下面是输出:数组([0]=>Array([brand]=>CARTIER[amount\u 2014]=>136476[amount\u 2013]=>22000)[1]=>Array([brand]=>tiffany[amount_2014]=>22000[amount_2013]=>0))是的@charles,是的,你的代码是正确的,但这不是我需要的方式,我不能每次都检查品牌,非常感谢你的关注,请参考这个问题的正确答案,你会了解更多。