Сортировка массива

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
Аватара пользователя
Barssoft
Сообщения: 726
Зарегистрирован: 2013.01.21, 16:03

Сортировка массива

Сообщение Barssoft » 2013.05.12, 19:55

как отсортировать такой массив

Код: Выделить всё

Array ( [41] => Array ( [user] => +7950====== [count] => 3 ) )  
по count

yan
Сообщения: 935
Зарегистрирован: 2011.03.23, 09:28
Откуда: Уфа

Re: Сортировка массива

Сообщение yan » 2013.05.12, 21:06

usort()

Аватара пользователя
Barssoft
Сообщения: 726
Зарегистрирован: 2013.01.21, 16:03

Re: Сортировка массива

Сообщение Barssoft » 2013.05.12, 21:19

yan писал(а):usort()

Код: Выделить всё

    public function actionIndex()
    {
        $promo = Promo::model()->findAll();
        foreach ($promo as $mod){
        $count = Users::model()->count('promo=:promo',array(':promo'=>$mod->promo));
        $user = Users::model()->findByPk($mod->user_id);
        $promout[]=array('user'=>$user->login,'count' =>$count);           
 
        }
        $guynames = array(); 
            foreach ($promout as $counter) {
            $guynames[] = $counter['count'];
            }
        array_multisort($guynames, SORT_DESC, $promout);
         $this->render('index',array('promo'=>$promout));
    } 
Вот так работает сортировка по убыванию

yan
Сообщения: 935
Зарегистрирован: 2011.03.23, 09:28
Откуда: Уфа

Re: Сортировка массива

Сообщение yan » 2013.05.12, 21:34

Barssoft писал(а):
yan писал(а):usort()

Код: Выделить всё

    public function actionIndex()
    {
        $promo = Promo::model()->findAll();
        foreach ($promo as $mod){
        $count = Users::model()->count('promo=:promo',array(':promo'=>$mod->promo));
        $user = Users::model()->findByPk($mod->user_id);
        $promout[]=array('user'=>$user->login,'count' =>$count);           
 
        }
        $guynames = array(); 
            foreach ($promout as $counter) {
            $guynames[] = $counter['count'];
            }
        array_multisort($guynames, SORT_DESC, $promout);
         $this->render('index',array('promo'=>$promout));
    } 
Вот так работает сортировка по убыванию
мне кажется эту задачу вообще лучше решать средcтвами моделей и sql, как минимум получение количества можно сделать через статический релейшен Promo к Users, по сортировке если уж делать в массиве я бы все таки предпочел usort и простейшую анонимную функцию, чем создавать еще один массив и крутить еще один цикл

Аватара пользователя
Barssoft
Сообщения: 726
Зарегистрирован: 2013.01.21, 16:03

Re: Сортировка массива

Сообщение Barssoft » 2013.05.12, 21:37

yan писал(а):
Barssoft писал(а):
yan писал(а):usort()

Код: Выделить всё

    public function actionIndex()
    {
        $promo = Promo::model()->findAll();
        foreach ($promo as $mod){
        $count = Users::model()->count('promo=:promo',array(':promo'=>$mod->promo));
        $user = Users::model()->findByPk($mod->user_id);
        $promout[]=array('user'=>$user->login,'count' =>$count);           
 
        }
        $guynames = array(); 
            foreach ($promout as $counter) {
            $guynames[] = $counter['count'];
            }
        array_multisort($guynames, SORT_DESC, $promout);
         $this->render('index',array('promo'=>$promout));
    } 
Вот так работает сортировка по убыванию
мне кажется эту задачу вообще лучше решать средcтвами моделей и sql, как минимум получение количества можно сделать через статический релейшен Promo к Users, по сортировке если уж делать в массиве я бы все таки предпочел usort и простейшую анонимную функцию, чем создавать еще один массив и крутить еще один цикл
usort у меня не отработал почему то, а так про реляционую связь и потом количество выводить что то даже не подумал, спасибо за идею

yan
Сообщения: 935
Зарегистрирован: 2011.03.23, 09:28
Откуда: Уфа

Re: Сортировка массива

Сообщение yan » 2013.05.12, 23:09

usort у меня не отработал почему то
возможно потому, что он функцию криво принимает - в последнем примере в мануле описано как раз сортировка по полю

Аватара пользователя
Barssoft
Сообщения: 726
Зарегистрирован: 2013.01.21, 16:03

Re: Сортировка массива

Сообщение Barssoft » 2013.05.13, 05:55

yan писал(а):
usort у меня не отработал почему то
возможно потому, что он функцию криво принимает - в последнем примере в мануле описано как раз сортировка по полю
http://www.php.уsu/functions/?usort тоже как бы не круто, еще массив сделать или функцию... Да в моем случаи это не критично, все равно надо будет переписать, а пока там 9 записей можно и так выводить

Аватара пользователя
porcelanosa
Сообщения: 547
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

Re: Сортировка массива

Сообщение porcelanosa » 2018.10.28, 18:07

http://www.php.уsu/functions/?usort тоже как бы не круто, еще массив сделать или функцию... Да в моем случаи это не критично, все равно надо будет переписать, а пока там 9 записей можно и так выводить
usort() в модели надо вызывать так:
в модели функция статическая:

Код: Выделить всё

/**
		 * @param $a
		 * @param $b
		 * @return int|\lt
		 */
		public static function compareByName($a, $b) {
			return strcasecmp($a, $b);
		}
и в нужном месте:

Код: Выделить всё

usort($return_childs, array($this,'compareByName'));
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы

Ответить