Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Можно ли отсортировать массив по ключу ?


Автор: nepster 22.7.2012, 23:04
есть массив: 

Код

Array
(
    [0] => Array
        (
            [id] => 1
            [login] => zowen
            [uid] => 3153815
            [rating] => 5
        )

    [1] => Array
        (
            [id] => 13
            [login] => qwerty
            [rating] => 7
        )

    [2] => Array
        (
            [id] => 182
            [login] => zet
            [rating] => 7
        )

    [2] => Array
        (
            [id] => 181
            [login] => zet
            [rating] => 71
        )

)



Как можно его отсортировать по ключу  [rating], что бы получить: 


Код

Array
(

    [0] => Array
        (
            [id] => 181
            [login] => zet
            [rating] => 71
        )

    [1] => Array
        (
            [id] => 13
            [login] => qwerty
            [rating] => 7
        )

    [2] => Array
        (
            [id] => 182
            [login] => zet
            [rating] => 7
        )
    [3] => Array
        (
            [id] => 1
            [login] => zowen
            [uid] => 3153815
            [rating] => 5
        )

)



Автор: dnts 22.7.2012, 23:10
http://php.net/manual/ru/function.array-multisort.php

http://www.php.net/manual/ru/function.usort.php

Автор: Sanchezzz 22.7.2012, 23:22
usort + пользовательская функция сортировки по ключу кто мешает применить способ
сортировка по DESC  по ASC поменять больше на меньше.
Код

    $test[] = array('id' => 181 , 'login'  => 'zet','rating' => 71);
       $test[] = array('id' => 182 , 'login'  => 'zet','rating' => 171);
    $test[] = array('id' => 183 , 'login'  => 'zet','rating' => 13);
    $test[] = array('id' => 180 , 'login'  => 'zet','rating' => 1223);
    
    
    print "<pre>";
     usort($test , 'cmp');
     print_R($test);
    print "</pre>";
    
    function cmp($a, $b) {
        return $a['rating'] > $b['rating'] ? -1 : 1;
    }

Автор: nepster 23.7.2012, 15:37
Код


$pag_data['array'] // получаем массив ;

    function cmp($a, $b) {
        return $a['rating'] > $b['rating'] ? -1 : 1;
    }

     usort($pag_data['array'] , "cmp");


foreach($pag_data['array'] as $user) {
 ... 


Без изменений. 

если сделать 
        
        
Код

$pag_data['array'] = usort($pag_data['array'] , "cmp");

        
        то вернет 1
        
        
подскажите пожалуйста, в чем тут ошибка ?

Добавлено через 6 минут и 13 секунд
Всем спасибо. Разобрался. 

Автор: nepster 23.7.2012, 16:48
еще возникла такая проблема, если идет класс, то как использовать в данном случае: 

Код

 function cmp($a, $b) { return $a['rating'] > $b['rating'] ? -1 : 1; }    
            
    
  function number_rating($topic_id = false) {
        
         $CI = &get_instance();
        
    // ДОБАВИМ ПОЛЕ РЕЙТИНГ
    for($i=0; $i<count($UserData);$i++) {
        $UserData[$i]['rating'] = $this->user_rating($UserData[$i]['id']);
    }
        
    // СОРТИРУЕМ ПО ПОЛЮ РЕЙТИНГ
    usort($UserData , "cmp"); <---------- как в таком случае передать usort cmp? (в данном случае вызов cmp - $this->cmp())


Автор: Sanchezzz 23.7.2012, 17:06
Точно также как и для всех callback аргументов
Код

  usort($UserData , array("имя класса", "имя функции "));

Автор: nepster 23.7.2012, 19:04
спасибо, все сработало. 

Мое понимание англ. равно 0 и не всегда удается понимать оф. документаци. Еще раз большое спасибо . 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)