복붙노트

PHP에서 연관 배열 정렬 [duplicate]

PHP

PHP에서 연관 배열 정렬 [duplicate]

이 형식으로 배열이 있습니다.

Array
(
    [0] => Array
        (
            [text] => tests
            [language] => 
            [advertiserCompetitionScale] => 5
            [avgSearchVolume] => 7480000
            [lastMonthSearchVolume] => 9140000
        )

    [1] => Array
        (
            [text] => personality tests
            [language] => 
            [advertiserCompetitionScale] => 5
            [avgSearchVolume] => 165000
            [lastMonthSearchVolume] => 201000
        )

    [2] => Array
        (
            [text] => online tests
            [language] => 
            [advertiserCompetitionScale] => 5
            [avgSearchVolume] => 246000
            [lastMonthSearchVolume] => 301000
        )

)

해당 형식의 배열을 avgSearchVolume 필드의 내림차순으로 정렬하려면 어떻게해야합니까? 이 기능이 내장되어 있습니까?

해결법

  1. ==============================

    1.usort를 사용하고 자신의 함수를 제공하여 주문을합니다.

    usort를 사용하고 자신의 함수를 제공하여 주문을합니다.

    function cmp($a, $b)
    {
        return $b['avgSearchVolume'] - $a['avgSearchVolume'];
    }
    
    usort($array, "cmp");
    
  2. ==============================

    2.PHP 5.3까지는 각 키에 새로운 함수를 만들지 않고 하위 키를 기준으로 정렬하는 데 가장 좋은 함수입니다.

    PHP 5.3까지는 각 키에 새로운 함수를 만들지 않고 하위 키를 기준으로 정렬하는 데 가장 좋은 함수입니다.

    function sortBySubkey(&$array, $subkey, $sortType = SORT_ASC) {
        foreach ($array as $subarray) {
            $keys[] = $subarray[$subkey];
        }
        array_multisort($keys, $sortType, $array);
    }
    sortBySubkey($arr, 'avgSearchVolume');
    

    PHP 5.3을 사용하면 지금과 같은 함수 호출을 만들 수 있습니다.

    function getSortVariable($sortType = SORT_ASC) {
        switch($sortType) {
            case SORT_ASC:
                return function ($a, $b) use ($subkey) { return strcmp($a[$subkey], $b[$subkey]); };
        }
    }
    
    function sortBySubkey(&$array, $subkey, $sortType = SORT_ASC) {
        $sortFunction = getSortVariable($sortType);
        usort($array, $sortFunction($subkey));
    }
    
  3. ==============================

    3.당신은 usort ()와 함께 커스텀 콜백 함수를 사용해야 할 것이다.

    당신은 usort ()와 함께 커스텀 콜백 함수를 사용해야 할 것이다.

    function cmp($a, $b)
    {
        if ($a['avgSearchVolume'] == $b['avgSearchVolume']) {
            return 0;
        }
        return ($a['avgSearchVolume'] > $b['avgSearchVolume']) ? -1 : 1;
    }
    usort($array, 'cmp');
    
  4. ==============================

    4.이것은 도움이 될 수 있습니다 : 배열 배열 정렬하기

    이것은 도움이 될 수 있습니다 : 배열 배열 정렬하기

  5. ==============================

    5.

    function querySort ($first_Array,$second_Array) {
        return strcasecmp($first_Array['name'],$second_Array['name']);
    }
    echo '<pre>';
    usort($main, 'querySort');
    
    print_r($main);
    die;
    
  6. ==============================

    6.다른 해결책은 다음과 같습니다. 정렬을위한 여러 옵션을 추가 할 수 있습니다 (코드의 주석 부분 참조).

    다른 해결책은 다음과 같습니다. 정렬을위한 여러 옵션을 추가 할 수 있습니다 (코드의 주석 부분 참조).

    <?php
    
    $arr=Array(
         Array("text" => "tests","language" =>"","advertiserCompetitionScale" => 5,"avgSearchVolume" => 7480000,"lastMonthSearchVolume" => 9140000),
         Array("text" => "personality tests","language" =>"","advertiserCompetitionScale" => 5,"avgSearchVolume" => 165000,"lastMonthSearchVolume"=>201000),
         Array("text" => "online tests","language" =>"","advertiserCompetitionScale" => 5,"avgSearchVolume" => 246000,"lastMonthSearchVolume" =>301000)
         );
    
    
    $sort = array();
    foreach($arr as $k=>$v) {
        $sort['avgSearchVolume'][$k] = $v['avgSearchVolume'];
        //$sort['text'][$k] = $v['text'];
    }
    
    array_multisort($sort['avgSearchVolume'], SORT_DESC, $arr);
    //array_multisort($sort['avgSearchVolume'], SORT_DESC, $sort['text'], SORT_ASC,$arr);
    
    echo "<pre>";
    print_r($arr);
    
    ?>
    

    REF : http://php.net/manual/en/function.array-multisort.php

  7. from https://stackoverflow.com/questions/777597/sorting-an-associative-array-in-php by cc-by-sa and MIT license