簡體   English   中英

循環遍歷子數組中的鍵值重復項

[英]Loop through key value duplicates in sub array

我試圖遍歷一個簡單的數組數組,然后如果我在子數組中找到重復的'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 的所有條目必須設置為黑色。

試試這個解決方案

    $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"
        ]
      ]
    ]

希望這有幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM