【问题标题】:Merge array according to match column values in PHP根据PHP中的匹配列值合并数组
【发布时间】:2016-05-30 06:03:08
【问题描述】:

我想根据列的匹配值合并两个数组。这是我的 2 个数组。

$array1 = array(2) {
   [0] => array(2) {
      ["total_process_per_category"] => string(2) "6"
      ["category_id"] => string(1) "1"
   }
   [1] => array(2) {
      ["total_process_per_category"] => string(1) "2"
      ["category_id"] => string(1) "2"
   }
}

$array2 = array(2) {
   [0] => array(2) {
      ["total_pinned_per_category"] => string(2) "16"
      ["category_id"] => string(1) "1"
   }
   [1] => array(2) {
      ["total_pinned_per_category"] => string(1) "4"
      ["category_id"] => string(1) "2"
   }
}

我想用这两个数组得到的是这样的。

array(2) {
   [0] => array(3) {
      ["total_process_per_category"] => string(2) "6"
      ["total_pinned_per_category"] => string(2) "16"
      ["category_id"] => string(1) "1"
   }
   [1] => array(3) {
      ["total_process_per_category"] => string(2) "2"
      ["total_pinned_per_category"] => string(1) "4"
      ["category_id"] => string(1) "2"
   }
}

如您所见,两个数组具有相同的键 ['category_id'] 和相同的值。

所以我想要完成的是使 ['total_process_per_category'] 和 ['total_pinned_per_category'] 基于它们的 ['category_id'] 一起放置在同一个数组上。

我使用嵌套的 foreach 得到了这个。但它对我来说看起来很丑陋的代码。那么有什么建议吗?

【问题讨论】:

  • 使用foreach有什么问题?它应该工作得很好,它到底有多丑?显示您的代码
  • 试试$array1 + $array2
  • array + array 的评论者 - 你也试试这个吗?
  • 好像它会将数组与其对应的类别 ID 结合起来哈哈:D
  • ??数组 + 数组不起作用。除此之外听起来不可能工作。哈哈。哈哈。反正。还是谢谢

标签: php arrays merge


【解决方案1】:

你可以试试array_reduce:

$someVariable = 'someValue';
$result = array_reduce(array_merge($array1, $array2), function ($carry, $item) use ($someVariable) {
    if (isset($carry[$item['category_id']])) {
        $carry[$item['category_id']] = array_merge($carry[$item['category_id']], $item);
    } else {
        $carry[$item['category_id']] = $item;
    }
    return $carry;
}, array());

var_dump($result);

【讨论】:

  • 伙计,我看到了你的回答。但我怎样才能获得所有类别 ID?它只显示一个类别 ID 为两个。谢谢老兄。
  • 任何方式。我会自己考虑的。也许你的回答足以让我有一个线索。 :)
  • 原因是第一次合并..让我更新答案
  • 它只显示第一个数组。 ??我做错了什么?
  • “已解决”我忘记更改 isset() 部分。现在我得到了我想要的。谢谢。它真的对我们有很大帮助。 :)
【解决方案2】:

你想要类似的东西:

foreach ( $array1 as $index => $value ) {
    $mergeArray[] = [ $value, $array2[$index]];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多