【问题标题】:How to merge arrays in PHP with a same value如何在PHP中合并具有相同值的数组
【发布时间】:2017-09-27 13:44:24
【问题描述】:

我想将两个具有相同值的数组 -> user_id 合并为一个数组。 您可以看到我有两个具有不同对象的数组。我想通过user_id 将它们合并到一个包含所有对象的数组中。 例如:

$array1 = [
    $array[0]->leads = 5643;
    $array[0]->user_id= 15;  
    $array[0]->sales = 1433;

    $array[1]->leads = 3264;
    $array[1]->user_id= 9;  
    $array[1]->sales = 1254;        
];

$array2 = [
    $array[0]->user_id= 15;
    $array[0]->processing = 2300;
    $array[0]->deleted = 203;

    $array[1]->user_id= 9;
    $array[1]->processing = 103;
    $array[1]->deleted = 80;
];

以下数组是目标。

$result = [
    $array[0]->user_id= 15;
    $array[0]->processing = 2300;
    $array[0]->leads = 5643;
    $array[0]->deleted = 203;
    $array[0]->sales = 1433;

    $array[1]->user_id= 9;
    $array[1]->processing = 103;
    $array[1]->leads = 3264;
    $array[1]->deleted = 80;
    $array[1]->sales = 1254;
];

【问题讨论】:

  • 你想在同一个数组中完成吗?正如我所看到的,第 0 索引和第 1 索引被遗漏了,甚至所有其他第 1 索引都移动到索引 0
  • 很简单,你不能使用任何直接的PHP数组函数,因为你已经删除了leads并添加了processing和deleted,数组键为0。所以你需要编写自定义代码.
  • @mark1505us 如果这是目标,请检查我的答案。
  • @mark1505us 你的意思是你需要加入具有相同user_id 值的数组吗?

标签: php arrays


【解决方案1】:

迭代您的数组并使用user_id 作为键构建对象的组合数组。

foreach ($array as $entry) {

    // if an entry for this user id hasn't been created in the result, add this object
    if (!isset($result[$entry->user_id])) {
        $result[$entry->user_id] = $entry;

    // otherwise, iterate this object and add the values of its keys to the existing entry
    } else {
        foreach ($entry as $key => $value) {
            $result[$entry->user_id]->$key = $value;
        }
    }
}

鉴于您刚刚提供的附加信息(两个单独的数组),解决方案基本相同,只需先将两个数组合并在一起即可。

foreach (array_merge($array1, $array2) as $entry) { ...

(https://3v4l.org/ccdQc 的工作示例)

【讨论】:

    【解决方案2】:

    array_merge 怎么样,

    <?php
    $array1 = array("color" => "red", 2, 4);
    $array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
    $result = array_merge($array1, $array2);
    print_r($result);
    ?>
    

    或array_merge_recursive,

    <?php
    $ar1 = array("color" => array("favorite" => "red"), 5);
    $ar2 = array(10, "color" => array("favorite" => "green", "blue"));
    $result = array_merge_recursive($ar1, $ar2);
    print_r($result);
    ?>
    

    示例

    $array = [
        1 => [
            'cost' => '25'
        ],
    
        2 => [
            'blah' => 'test'
        ]
    ];
    
    $new_array = array_merge_recursive($array[1], $array[2]);
    
    var_dump($new_array);
    

    输出

    array(2) {
      ["cost"]=>
      string(2) "25"
      ["blah"]=>
      string(4) "test"
    }
    

    现场示例

    Repl

    【讨论】:

    • 但是mark要求它的方式是指同一个数组
    • 这不是问题的答案,只是说明如何使用array_merge 和array_merge_recursive
    • @RohitAilani 仍然有可能,您只需使用一个替换数组来获取这些值。
    • 看来他要求的更像是 SQL“JOIN”而不是合并
    • @ishegg OP 需要澄清。
    【解决方案3】:
    <?php
        $array1= array("leads"=> 5643,"user_id"=>15,"sales" =>1433);
        $array2= array("user_id"=> 15,"processing" => 2300,"deleted" => 203);
            $array= (array_merge($array1,$array2));
            print_r($array);
        ?>
    

    【讨论】:

    • 虽然此代码 sn-p 可能是解决方案,但 including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    相关资源
    最近更新 更多