За последние 24 часа нас посетили 18106 программистов и 1699 роботов. Сейчас ищут 1535 программистов ...

Сортировка многомерного массива по значению внутренних

Тема в разделе "PHP для новичков", создана пользователем Rave Speeder, 7 окт 2009.

  1. Rave Speeder

    Rave Speeder Активный пользователь

    С нами с:
    7 окт 2009
    Сообщения:
    2
    Симпатии:
    0
    Есть многомерный массив массивов :)
    Код (PHP):
    1. $array[0]=("type0","data0","time0")
    2. $array[1]=("type1","data1","time1")
    3. //...
    4. $array[N]=("typeN","dataN","timeN") 
    Как отсортировать массив $array по значению "timeX", сохрания порядок элементов составляющих массивов ? То есть чтобы на первом месте был элемент с наменьшим "time", и так далее? Спасибо.

    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
     
  2. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    usort($array, reate_function('$a,$b', ' return ($a[2] < $b[2]) ? -1 : ($a[2] == $b[2] ? 0 : 1); '));
     
  3. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
  4. Andrey

    Andrey Активный пользователь

    С нами с:
    3 авг 2009
    Сообщения:
    10
    Симпатии:
    0
    Адрес:
    Simferopol
    Сталкивался с такой траблой - ффункцию писал сам
    PHP:
    1.  
    2. <?php
    3.   function multisort($array, $index)
    4.   {
    5.     $i=0;
    6.     while($el_arr = $array[$i][$index])
    7.     {
    8.         $new_arr[] = $el_arr;
    9.         $i++;
    10.     }
    11.     asort($new_arr);
    12.     $keys = array_keys($new_arr);
    13.     for($key=0; $key<count($keys); $key++)
    14.         $result[] = $array[$keys[$key]];
    15.     return $result;
    16.   }
    17. ?
    18.  
     
  5. REDS

    REDS Новичок

    С нами с:
    26 фев 2016
    Сообщения:
    1
    Симпатии:
    0

    Функция полезная, однако есть ошибка - если $array[$i][$index] = 0, то подмассив выпиливается:)

    В связи с этим взял на себя наглость немного переписать функцию и поднять топик:)
    Код (PHP):
    1. function multisort($array, $index) 
    2.     { 
    3.     for($i = 0; $i < count($array); $i++) 
    4.     { 
    5.     $el_arr = $array[$i][$index];
    6.     $new_arr[] = $el_arr; 
    7.     } 
    8.     asort($new_arr); 
    9.     $keys = array_keys($new_arr); 
    10.     for($key=0; $key<count($keys); $key++) 
    11.     $result[] = $array[$keys[$key]]; 
    12.     return $result; 
    13.     } 
    14.  
    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    не надо так
     
  7. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.770
    Адрес:
    :сердА
    Новички, что с них взять)

    На, теперь так кури:
    Код (PHP):
    1. for($key = 0, $count = count($keys); $key < $count; $key++)  
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    можно ещё круче, но форыч быстрее фора