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


Автор: Guedda 22.10.2007, 17:06
Есть массив приблизительно такой структуры:
Цитата

Array
(
    [0] => stdClass Object
        (
            [id] => 27
            [parentid] => 13
            [price] => 3143
        )

    [1] => stdClass Object
        (
            [uid] => 54
            [parentuid] => 13
            [price] => 2600
        )

    [2] => stdClass Object
        (
            [id] => 27
            [parentid] => 13
            [price] => 3143
        )

    [3] => stdClass Object
        (
            [id] => 55
            [parentid] => 17
            [price] => 600
        )

    [4] => stdClass Object
        (
            [id] => 54
            [parentid] => 17
            [price] => 2600
        )
)

Так вот мне его надо отсортировать сначала по parentid, а потом по price.

Заранее благодарен за ответ.

Автор: Всемогущий 22.10.2007, 18:02
легче сделать это на уровне бд

Автор: Guedda 22.10.2007, 18:08
Цитата(Всемогущий @  22.10.2007,  19:02 Найти цитируемый пост)
легче сделать это на уровне бд 

Зачем писать глупости? Я попросил одно, а ты пишешь совершенно другое. Подумай, прежде чем написать.

Автор: Wolf1994 22.10.2007, 18:23
Код

function complex_sort ($your_ar)
{
 foreach ($your_ar as $k=>$v)
  $t_ar [$v ["id"]]=$v ["parentid"].".".$v ["price"];

  arsort ($t_ar, SORT_NUMERIC);

  reset ($t_ar);

 foreach ($t_ar as $k=>$v)
  $t_ar2 []=$your_ar [$k];

 return $t_ar2;
}


Передайте функции complex_sort Ваш массив и она вернёт его отсортированным соответвенно Вашим критериям.

P.S. Не тестировал.

Автор: sw04 22.10.2007, 20:07
выкладывали давненько пример array_multisort_column 
в поиске нашел буквально на прошлой неделе.

Автор: SelenIT 22.10.2007, 22:47
А обычный http://php.net/usort разве не подойдет?
Код

function cmp($a,$b) {
     // в первую очередь сравниваем по parentid
     if ($a->parentid != $b->parentid) return $a->parentid - $b->parentid;
     // а если parentid-ы равны - учитываем price
     else return $a->price - $b->price;
}

usort($array, "cmp");

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