За последние 24 часа нас посетил 43721 программист и 3134 робота. Сейчас ищут 1059 программистов ...

Сортировка многомерного массива

Тема в разделе "PHP для новичков", создана пользователем Neka, 10 апр 2012.

  1. Neka

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

    С нами с:
    16 янв 2010
    Сообщения:
    188
    Симпатии:
    0
    Приветствую!
    К примеру есть такой массивчик
    Код (PHP):
    1.    array('01', 'ppp1', 'xxx', 'yyy', ... ,),
    2.    array('01', 'ppp7', 'xxx', 'yyy', ... ,),
    3.    array('01', 'ppp2', 'xxx', 'yyy', ... ,),
    4.    array('01', 'ppp4', 'xxx', 'yyy', ... ,),
    5.    ... ,
    6. ); 
    Он передается в JS посредством JSON & AJAX. Мне нужна сортировка по 2му полю каждого массива, максимум, что я смог придумать - это
    Код (PHP):
    1. uasort($childrenSessions, function($a, $b) {
    2.             return strnatcmp($a[1], $b[1]);
    3.         });
    4.  
    Но естественно это не работает так как я хочу. Помогите с проблемкой плиз
     
  2. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
  3. Neka

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

    С нами с:
    16 янв 2010
    Сообщения:
    188
    Симпатии:
    0
  4. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    ну почитай там вопрос и ответ - там точно такая же тема, как у тебя, один в один. Там есть решение.
     
  5. Neka

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

    С нами с:
    16 янв 2010
    Сообщения:
    188
    Симпатии:
    0
    1. там сортировка по дате, а не по строковым полям (т.е. буквы & цифры).
    2. У меня тоже есть реализация с uasort, которая не работает.
     
  6. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Слушай, ну 20 секунд - и всё работает. Только что проверил у себя. Функция cmp без изменений практически - только ключ нужный подставил и всё

    Код (PHP):
    1. <pre><?php
    2. $arr = array(
    3.     array('01', 'ppp1', 'xxx', 'yyy'),
    4.     array('01', 'ppp7', 'xxx', 'yyy'),
    5.     array('01', 'ppp2', 'xxx', 'yyy'),
    6.     array('01', 'ppp4', 'xxx', 'yyy')
    7. );
    8. function cmp($a, $b) {
    9.     return(($a[1] === $b[1]) ? 0 : (($a[1] > $b[1]) ? 1 : -1));
    10. }
    11. uasort($arr, 'cmp');
    12. print_r($arr);
    13. ?></pre>
    Добавлено спустя 7 минут 11 секунд:
    Вот лучше так, чтобы правильно сортировалось и когда у тебя после ppp идёт число большее чем 9:
    Код (PHP):
    1. <pre><?php
    2. $arr = array(
    3.     array('01', 'ppp1', 'xxx', 'yyy'),
    4.     array('01', 'ppp7', 'xxx', 'yyy'),
    5.     array('01', 'ppp2', 'xxx', 'yyy'),
    6.     array('01', 'ppp4', 'xxx', 'yyy'),
    7.     array('01', 'ppp12', 'xxx', 'yyy')
    8. );
    9. function cmp($a, $b) {
    10.     $first = (int) substr($a[1], 3);
    11.     $second = (int) substr($b[1], 3);
    12.     return(($first === $second) ? 0 : (($first > $second) ? 1 : -1));
    13. }
    14. uasort($arr, 'cmp');
    15. print_r($arr);
    16. ?></pre>