다차원배열 다룰때는 map을 주로 사용합니다
$result = collect($array)->map(function($items) { return $items->sortByDesc('count'); });
우선 각 배열 원소의 속성으로 "apple"이라고 타입을 표시하고 있으므로, "사과"와 같은 키는 불필요하며, 잘못된 데이터 구조라 생각되어 아래와 같이 고쳤습니다.
$array = [ "과일" => [ [ "count" => 3, "name" => "apple", ], [ "count" => 12, "name" => "grape", ], ], "자동차" => [ [ "count" => 9, "name" => "small", ], [ "count" => 21, "name" => "medium", ], ], ];
저보다 더 실력있는 분이 더 좋은 솔루션을 찾아주실거라 생각하며, 제 의견을 드립니다.
$sorted = []; foreach ($array as $superType => $subTypeCollection) { foreach ($subTypeCollection as $subType) { usort($subTypeCollection, function ($a, $b) { return $b['count'] <=> $a['count']; }); $sorted[$superType] = $subTypeCollection; } } // 결과 [ "과일" => [ [ "count" => 12, "name" => "grape", ], [ "count" => 3, "name" => "apple", ], ], "자동차" => [ [ "count" => 21, "name" => "medium", ], [ "count" => 9, "name" => "small", ], ], ]
Array
(
[과일] => Array
(
[사과] => Array
(
"count" => 3
"name" => "apple"
)
[포도] => Array
(
"count" => 12
"name" => "grape"
)
[오렌지] => Array
(
"count" => 7
"name" => "orange"
)
),
[자동차] => Array
(
[소형차] => Array
(
"count" => 9
"name" => "small"
)
[중형차] => Array
(
"count" => 21
"name" => "medium"
)
),
[인물] => Array
(
[축구선수] => Array
(
"count" => 5
"name" => "football"
)
[야구선수] => Array
(
"count" => 10
"name" => "baseball"
)
),
위 와 같은 다차원 배열일 경우 count의 값으로 배열을 내림차순으로 정렬하고 싶습니다;
collect($array)->sortByDesc('count')→values() 방법도 생각해 봤는데 먹히질 않더군요..
혹시 좋은 방법 없을까요?
[사과] => Array
(
"count" => 3
"name" => "apple"
)
[포도] => Array
(
"count" => 12
"name" => "grape"
)
[오렌지] => Array
(
"count" => 7
"name" => "orange"
)
)
정렬 후 원하는 결과의 모양도 제시해 주시면 방법을 생각하기가 더 좋을 것 같습니다.