Сортировка массива по убыванию размера фраз

Тема в разделе "PHP", создана пользователем Stripe, 9 май 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Stripe

    Stripe

    Регистр.:
    21 окт 2007
    Сообщения:
    164
    Симпатии:
    9
    Столкнулся с проблемой.
    Есть массив кеев
    Необходимо отсортировать его таким образом, что бы самый длинный элемент массива $array[$i][0] был на первом месте, и так по убыванию. В приведенном примере явно видно, что $array[4][0] должен быть первым, тогда как $array[3][0] последним. Как этого добиться?
     
  2. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    364
    Симпатии:
    117
    есть куча алгоритмов сортировки( которые явно вы должны были изучать)

    все что вам нужно, так это изменить критерий сортировки с сравнения элементов массивов, на сравнение длин строк этих элементов
     
    Stripe нравится это.
  3. Stripe

    Stripe

    Регистр.:
    21 окт 2007
    Сообщения:
    164
    Симпатии:
    9
    За ссылку спасибо, но я ни кому ни чего не должен был и не изучал их.
    UPD:
    Да, вы дали абсалютно правильное направление поиска. Вот что у меня получилось.
     
  4. chang

    chang

    Регистр.:
    20 ноя 2009
    Сообщения:
    364
    Симпатии:
    117
    человек который хоть отдаленно занимаеться программированием должен это учить :)

    PHP:
          function qsort (&$array$left$right) {  
            
    $i $left;
            
    $j $right;
            
    $x $array[($left $right) / 2];
            do {
                while (
    strlen($array[$i][0]) < strlen($x[0]))  $i++;
                while (
    strlen($array[$j][0]) > strlen($x[0])) $j--;
                if (
    $i <= $j) {
                    if (
    strlen($array[$i][0]) > strlen($array[$j][0]))
                    list(
    $array[$i], $array[$j]) = array($array[$j],$array[$i]);
                     
    $i++;
                     
    $j--;
                    }
            } while (
    $i <= $j);
                    if (
    $i $rightqsort ($array$i$right);
                    if (
    $j $leftqsort ($array$left$j);
        }

      
    $array1 = array(  array("доставка учебников"'http://megalololo.ru/'),
                        array(
    "доставка цветов"'http://megalololo.ru/'),
                        array(
    "магазин учебников"'http://megalololo.ru/'),
                        array(
    "учебники"'http://megalololo.ru/'),
                        array(
    "учебники русского языка"'http://megalololo.ru/')
                     );



    qsort($array10count($array1)-1);
    print_r($array1);
    ------------
    я так понял данный массив вы дергаете с БД, если да, то думаю будет быстрее если переложить выполнение данной работы на СУБД
    PHP:
    SELECT urlanchorLENGTH(anchor) as lenght  FROM `keys`
      
    ORDER BY anchor DESC
     
    Stripe нравится это.
  5. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    735
    Симпатии:
    261
    Я бы через usort делал и не парился.

    PHP:
    function complen($a1$a2) {
     return  
    strlen($a1[0]) - strlen($a2[0]);
    }
    usort($arr'complen');   // в $arr - твой массив
    как-то так..
     
Статус темы:
Закрыта.