질문을 삭제하지 말아주세요.!
 
1
0
-1

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"
                    )
              )

  1. 이현석

    정렬 후 원하는 결과의 모양도 제시해 주시면 방법을 생각하기가 더 좋을 것 같습니다.

CommentAdd your comment...

2 answers

  1.  
    1
    0
    -1

    다차원배열 다룰때는 map을 주로 사용합니다

    $result = collect($array)->map(function($items) {
    	return $items->sortByDesc('count');
    });
      CommentAdd your comment...
    1.  
      1
      0
      -1
      • 우선 각 배열 원소의 속성으로 "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",
            ],
          ],
        ]
        CommentAdd your comment...