[英]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.