[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сортировка массивов php
vechera
Помогите пожалуйста разобраться. Стоит такая задача.
Имеем 2-х уровневый массив. Как выстроить внутренние массивы, по одному из его значений.
Массив выглядит примерно так:

сдам|1000|Москва|2
продам|200|Владивосток|3
сдам|500|Калуга|3

Сортировать будем допустим по 2-му значению. то есть $dl[1] при:
$hh=count($tmp_array);
$total_rows=0;
for ($d=0; $d<$hh; $d++) {
$dl = explode("|", $tmp_array[$d]);
$total_rows++; }

Нужно чтобы после сортировки массив выглядел следующим образом:
сдам|1000|Москва|2
сдам|500|Калуга|3
продам|200|Владивосток|3

то есть сортировка по убыванию. Или аналогично по возростанию.

Как в данном случае можно воспользоваться функцией sort() или rsort()

Подскажите пожалуйста. Буду очень благодарен.



Спустя 11 минут, 7 секунд (26.08.2008 - 15:30) netruxa написал(а):
экспорт в Эксель и сортировка по столбцу (самый простой вариант и не надо парится с программированием)))

Спустя 25 минут, 43 секунды (26.08.2008 - 15:56) vechera написал(а):
Нет к сожалению это не возожно... база на сайте постоянно обновляется за счёт сторонних пользователей. Скрипт необходим чтобы выстраивать объекты например по цене или расстоянию от МКАД.

Спустя 2 часа, 35 минут, 8 секунд (26.08.2008 - 18:31) Alchemist написал(а):
Этот вопрос уже задавался на форуме и ответ на него будет прежним:

стандартными функциями этого сделать нельзя, но можно написать свою функцию сравнения двух элементов, и воспользоваться стандартными функциями usort() или uasort().

Спустя 13 минут, 45 секунд (26.08.2008 - 18:45) Viking написал(а):
http://ru2.php.net/manual/ru/function.sort.php
там в комментах обсуждаются сортировки многомерных массивов

Спустя 2 дня, 2 часа, 57 минут, 34 секунды (28.08.2008 - 21:42) HeXoN написал(а):
ну я на данный момент сотритурую ногомерный масив методом "Сортировка пузырьком" http://http://ru.wikipedia.org/wiki/Сортировка пузырьком
просто ставлюту переменную по корой надо сортировать

да и ещё поиск есть я сам такой вопрос задвал почитай может поможет
http://www.phpforum.ru/index.php?showtopic=8499&hl=hexon

Спустя 2 месяца, 3 дня, 19 часов, 14 минут, 23 секунды (1.11.2008 - 17:57) Mastodont написал(а):
А в каком порядке будет сравнивать фунция sort() элементы массива $a=array(1,4,5,2,3)?

Спустя 22 часа, 39 минут, 40 секунд (2.11.2008 - 16:36) Alchemist написал(а):
Искренне недоумеваю зачем тебе это надо (тем более что это навряд ли кто-то знает), но один из возможных вариантов следующий:
1-3, 4-3, 2-3, 5-3, 1-2, 4-5

Спустя 6 месяцев, 24 дня, 17 часов, 30 минут, 31 секунда (27.05.2009 - 09:07) atarix написал(а):
Подскажите, как можно отсортировать массив
PHP
[0] => Array
        (
            [
THANKS] => 2
            
[PHOTO] => 17356
        
)

    [
1] => Array
        (
            [
THANKS] => 1
            
[PHOTO] => 3049
        
)

    [
2] => Array
        (
            [
THANKS] => 3
            
[PHOTO] => 9526
        
)

//по ключам THANKS, по убыванию (т.е. самое большое число - первое и .т.д.)
//в такой вид:
  
[2] => Array
        (
            [
THANKS] => 3
            
[PHOTO] => 9526
        
)
 [
0] => Array
        (
            [
THANKS] => 2
            
[PHOTO] => 17356
        
)
  [
1] => Array
        (
            [
THANKS] => 1
            
[PHOTO] => 3049
        
)

и желательно исправить при этом индексы по порядку - 0,1,2

Спустя 7 минут, 32 секунды (27.05.2009 - 09:14) Kuliev написал(а):
atarix
если не ошибаюсь asort()

Спустя 44 минуты, 11 секунд (27.05.2009 - 09:59) atarix написал(а):
asort не подойдёт

Спустя 52 минуты, 39 секунд (27.05.2009 - 10:51) atarix написал(а):
PHP
function cmp($a$b)
        {
            return 
strcmp($a["THANKS"], $b["THANKS"]);
        }
        
usort($clear_mas"cmp");
                
krsort($clear_mas);
        
reset($fruits);

smile.gif

Спустя 1 минута, 56 секунд (27.05.2009 - 10:53) Kuliev написал(а):
Цитата (atarix @ 27.05.2009 - 11:59)
asort не подойдёт

Вот работает.
natsort();

Спустя 1 день, 1 час, 43 секунды (28.05.2009 - 11:54) Tamplier написал(а):
ну точно не natsort(); biggrin.gif
Даже в стандартной справке есть готовое решение: http://de2.php.net/manual/ru/function.usort.php

Можно его немного унифицировать:
PHP
function cmp($a$b)
{
    global 
$sort_field;
    return 
strcmp($a[$sort_field], $b[$sort_field]);
}
$sort_field='THANKS';//для первого вопроса установить значение 1
usort($massiv"cmp");

После этого с ключами массива уже ничего делать не надо - они итак идут по порядку.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.