【问题标题】:Loop through key value duplicates in sub array循环遍历子数组中的键值重复项
【发布时间】:2019-03-29 19:07:45
【问题描述】:

我正在尝试遍历一个简单的数组数组,然后如果我在子数组中找到 'id' 值的重复项,请将它们分组并遍历它们。

这对你来说很明显,但我找不到简单的方法来做到这一点。

例子:

$records = array(
    array(
        'id' => 2135,
        'start' => 'january',
        'end' => 'march',
        'color' => 'blue'
    ),
    array(
        'id' => 2135,
        'start' => 'march',
        'end' => 'april',
        'color' => 'red'
    ),
    array(
        'id' => 5342,
        'start' => 'january',
        'end' => 'july',
        'color' => 'black'
    ),
    array(
        'id' => 5623,
        'start' => 'march',
        'key' => 'august',
        'color' => 'green'
    ),
    array(
        'id' => 5342,
        'start' => 'april',
        'end' => 'june',
        'color' => 'purple'
    )
);

需要结果:

ID 为 2135 的所有条目必须设置为蓝色。
id 5342 的所有条目都必须设置为黑色。

【问题讨论】:

  • loop through them 是什么意思??
  • 我真的不明白你的问题。在您需要帮助之前,请仔细描述
  • @ThisGuyHasTwoThumbs 我需要遍历每个数组。如果我错了,请纠正我,但 array_unique 会跳过重复项?
  • 你的“子数组”每个只包含一个元素,那么你想在那里“循环”什么呢?这个问题在目前的形式下意义不大,请正确解释预期的结果是什么。
  • @misorude 它们包含一个元素,仅作为示例。也许我应该把我的真实数据提供更多的背景。

标签: php laravel


【解决方案1】:

试试这个解决方案

    $records = array(
        array(
            'id' => 2135,
            'start' => 'january',
            'end' => 'march',
            'color' => 'blue'
        ),
        array(
            'id' => 2135,
            'start' => 'march',
            'end' => 'april',
            'color' => 'red'
        ),
        array(
            'id' => 5342,
            'start' => 'january',
            'end' => 'july',
            'color' => 'black'
        ),
        array(
            'id' => 5623,
            'start' => 'march',
            'key' => 'august',
            'color' => 'green'
        ),
        array(
            'id' => 5342,
            'start' => 'april',
            'end' => 'june',
            'color' => 'purple'
        )
    );
    $collection = collect($records);
    $grouped = $collection->groupBy('id')->map(function($entries, $key){
        $color = collect($entries)->first()['color'];
        $e = $entries->toArray();
        foreach ($e as $key => $value) {
            $e[$key]['color'] = $color;
        }
        return $e;
    })->values()->all();
    dd($grouped);

输出

    array:3 [▼
      0 => array:2 [▼
        0 => array:4 [▼
          "id" => 2135
          "start" => "january"
          "end" => "march"
          "color" => "blue"
        ]
        1 => array:4 [▼
          "id" => 2135
          "start" => "march"
          "end" => "april"
          "color" => "blue"
        ]
      ]
      1 => array:2 [▼
        0 => array:4 [▼
          "id" => 5342
          "start" => "january"
          "end" => "july"
          "color" => "black"
        ]
        1 => array:4 [▼
          "id" => 5342
          "start" => "april"
          "end" => "june"
          "color" => "black"
        ]
      ]
      2 => array:1 [▼
        0 => array:4 [▼
          "id" => 5623
          "start" => "march"
          "key" => "august"
          "color" => "green"
        ]
      ]
    ]

希望有帮助

【讨论】:

  • 重复? ID ?即使他们有不同的开始/结束?应该分配哪种颜色?在集合中找到的第一种颜色?
  • 您应该解释您的代码,以便 OP 理解解决方案 - 而不仅仅是记住它
猜你喜欢
  • 2011-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-19
  • 2015-01-09
  • 1970-01-01
  • 1970-01-01
  • 2016-08-24
相关资源
最近更新 更多