Сортировка массива по длинне строки

Тема в разделе "Как сделать...", создана пользователем komyak, 10 май 2014.

  1. komyak

    komyak

    Регистр.:
    4 фев 2009
    Сообщения:
    482
    Симпатии:
    183
    Весь мозг вы... как сделать.
    Нужно отсортировать массив по длине строки в порядке убывания:
    PHP:
    Array
    (
        [
    0] => /
        [
    1] => http://store.apple.com/
        
    [2] => /mac/
        [
    3] => /ipod/
        [
    4] => /iphone/
        [
    5] => /ipad/
        [
    6] => /itunes/
        [
    7] => /support/
        [
    8] => /iphone-5s/powerful/
        [
    9] => /iphone-5s/powerful/
        [
    10] => /iphone-5s/powerful/#video-power

    Последним моим вариантом был: array_multisort Но лыжи тоже не поехали..

    Помогите пожалуйста
     
  2. Nei

    Nei Nosce te ipsum

    Регистр.:
    5 сен 2009
    Сообщения:
    599
    Симпатии:
    470
    Код:
    function string_sort($a, $b)
    {
      if (strlen($a) < strlen($b)) {
      return 1;
      }
      elseif (strlen($a) == strlen($b)) {
      return 0;
      }
      else { return -1; }
    }
    
    $arr = array();
    
    $arr[1] = '123';
    $arr[2] = '123 123 123';
    $arr[3] = '123 123';
    
    print_r ($arr);
    
    usort($arr, 'string_sort');
    
    print_r ($arr);
    
     
    komyak нравится это.
  3. Sciphoshee

    Sciphoshee Писатель

    Регистр.:
    15 май 2014
    Сообщения:
    2
    Симпатии:
    2
    Есть еще способ, может пригодится.

    Код:
    //исходный массив
    $arr_unsorted = array (
        0 => '/',
        1 => 'http://store.apple.com/',
        2 => '/mac/',
        3 => '/ipod/',
        4 => '/iphone/',
        5 => '/ipad/',
        6 => '/itunes/',
        7 => '/support/',
        8 => '/iphone-5s/powerful/',
        9 => '/iphone-5s/powerful/',
        10 => '/iphone-5s/powerful/#video-power'
    );
    
    //массив в который запишем длины строк исходного массива
    $arr_items_length = array();
    
    foreach( $arr_unsorted AS $k => $v ){
      $arr_items_length[$k] = strlen($v);
    }
    
    //сортируем вспомогательный массив в желаемом направлении
    arsort($arr_items_length);
    
    //собираем сортированный массив
    $arr_sorted = array();
    foreach ($arr_items_length AS $k => $length) {
        $arr_sorted[$k] = $arr_unsorted[$k];
    }
    
    echo '<pre>';
    print_r($arr_unsorted);
    echo '</pre>';
    echo '<pre>';
    print_r($arr_sorted);
    echo '</pre>';
     
    komyak нравится это.