【问题标题】:How to merge or combine 2 arrays based on their keys in php如何根据 php 中的键合并或组合 2 个数组
【发布时间】:2016-11-17 08:44:12
【问题描述】:

我有 2 个数组,我想合并或合并它们...

Array
(
    [0] => Array
        (
            [year] => 2015
            [value] => 32
        )

    [1] => Array
        (
            [year] => 2016
            [value] => 54
        )    
)

Array
(
    [0] => Array
        (
            [year] => 2015
            [value] => 95
        )

    [1] => Array
        (
            [year] => 2016
            [value] => 2068
        )

)

我希望它们看起来像这样......

Array(
    [2015]=>array(
        [0] => 32
        [1] => 95
    )
    [2016]=>array(
        [0] => 54
        [1] => 2068
    )
)

这可能吗?如果有的话,如何?....非常感谢

【问题讨论】:

  • 请先试一试,分享你的努力。我们在这里帮助彼此学习,而不是做彼此的工作。
  • 你可以先看看你是如何创建这两个数组的,然后在那个阶段正确创建它们,而不是稍后修复它们

标签: php arrays merge


【解决方案1】:

试试:

$newArr = array();
foreach($array1 as $key1=>$arr1) {
  $newArr[$arr1['year']][] = $arr1['value'];
  $newArr[$arr1['year']][] = $array2[$key]['value'];
}

【讨论】:

  • 只有在两个数组大小相同或配置相同时才有效
  • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性 cmets 挤满你的代码,因为这会降低代码和解释的可读性!
【解决方案2】:

如果原始数组是$a$b,运行这段代码,你想要的结果会在$result

$sources = array_merge($a,$b);
$result = [];
foreach($sources as $data){
    $yr = $data['year'];
    if(!isset($result[$yr])) $result[$yr]=[];
    $result[$yr][]=$data['value'];
}

Live demo

【讨论】:

    【解决方案3】:
     $a = array(
         0 => array
             (
                "year" => 2015,
                "value" => 32
             ),
         1 => array
             (
                "year" => 2016,
                "value" => 54
             )  
     );
    
     $b = array(
         0 => array
            (
               "year" => 2015,
               "value" => 300
            ),
        1 => array
           (
               "year" => 2016,
               "value" => 5400
           )  
    );
    
    $c = array_merge($a,$b);
    
    $output = array();
    foreach($c as $key=>$val)
    {
        $output[$val['year']][] = $val['value'];
    }
    
    echo '<pre>';
    print_r($output);
    exit;
    

    试试这个代码..

    【讨论】:

    • @user3082963 如果它解决了你的问题,你真的应该选择一个答案。
    【解决方案4】:

    你也可以这样做,

    <?php
    $test1 = [["year"=>2015,"value"=>32],["year"=>2016,"value"=>54]];
    $test2 = [["year"=>2015,"value"=>95],["year"=>2016,"value"=>2068]];
    
    $newarray=array();
    foreach($test1 as $key1=>$value1){
      $temp = [$value1['value']];
      foreach($test2 as $key2=>$value2){
        if($value1['year']==$value2['year']){
        $temp[] = $value2['value'];
        }
        $newarray[$value1['year']] = $temp;
      }
    }
    
    print_r($newarray);
    ?>
    

    在这里查看:https://eval.in/605323

    输出是:

    Array
    (
        [2015] => Array
            (
                [0] => 32
                [1] => 95
            )
    
        [2016] => Array
            (
                [0] => 54
                [1] => 2068
            )
    
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多