【问题标题】:How to merge two array in according to value in PHP?如何根据PHP中的值合并两个数组?
【发布时间】:2014-08-10 05:15:23
【问题描述】:

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

数组 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
    )

 )

我需要 result 数组为:

 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 战斗,但在这种情况下对我没有用,如果有人可以帮助查询,那么它也很有帮助。

【问题讨论】:

  • 很抱歉让您失望,但您一开始就走错了路:使用 CodeIgniter 的第一个错误;第二:有2个SQL查询;第三种可能:错误的数据库架构?
  • 对不起@CSᵠ 但这是我现在能做的,如果你能帮我写一个好的 SQL 查询,所有其他人都是 contants
  • 它可能会帮助您分享数据库架构和您的 2 个查询
  • 您好@CSᵠ,请在 Pastbin (pastebin.com/HpCkGuif) 中找到查询和数据库架构

标签: php mysql sql arrays codeigniter


【解决方案1】:

试试这个:

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.
        )
)

【讨论】:

    【解决方案2】:
    <?php
    
    for ($i = 0, $max = count($arr1); $i < $max; ++$i) {
        $arr1[$i]['amount_2013'] = isset($arr2[$i]['amount_2013']) ? $arr2[$i]['amount_2013'] : 0;
    }
    

    【讨论】:

    • 不,伙计,它不工作,请再次回答问题。
    【解决方案3】:
    $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);
    

    【讨论】:

    • 配合它工作但没有按我需要的方式工作,我需要检查品牌,如果一个品牌匹配,那么只添加价值,否则它是零
    【解决方案4】:

    这是我用的:

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

    【讨论】:

    • 谢谢你的朋友,谢谢你的尝试,但它不是正确的。
    • @Bukky,这行得通,这里是输出: Array ( [0] => Array ( [brand] => CARTIER [amount_2014] => 136476 [amount_2013] => 22000 ) [1] => 数组([品牌] => 蒂芙尼 [amount_2014] => 22000 [amount_2013] => 0))
    • 是的@charles,是的,您的代码是正确的,但这不是我需要的方式,我无法每次都检查品牌,非常感谢您调查它,请参考正确答案这个问题,你会明白更多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多