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

komyak

Постоялец
Регистрация
4 Фев 2009
Сообщения
483
Реакции
194
Весь мозг вы... как сделать.
Нужно отсортировать массив по длине строки в порядке убывания:
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 Но лыжи тоже не поехали..

Помогите пожалуйста
 
Код:
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);
 
Есть еще способ, может пригодится.

Код:
//исходный массив
$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>';
 
Назад
Сверху