[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Можно ли усовершенстововать функцию сортировки?
baston
Есть задача: отобразить все слова из нескольких предложений, отсортировав их по длине (то есть, вначале идут слова из одной буквы, затем - из двух и т.д.).
Я реализовал этот механизм через функцию, но сдается мне, что можно как-то оптимизировать мой несовершенный код (я только учусь).
Буду благодарен за помощь.

А вот, что у меня получилось:
$str = 'Проект, задуманный как «дом для отдыха в естественной обстановке», представляет небольшой двухэтажный прямоугольник (5,85х7 м)
со скатной кровлей, позволяющий в полной мере насладиться окружающим
видом на горы. В общем-то простой и небольшой дом получился довольно
гармоничным, заметным и современным.';

$musor = array('"',',','.','(',')','«','»');
$str = str_replace($musor, "", $str);
$words = explode(" ", $str);

// Функция сортировки элементов массива по длине элементов
function mysort($a, $cool.gif
{
if(mb_strlen($a, 'utf-8') < mb_strlen($b, 'utf-8')) return -1;
if(mb_strlen($a, 'utf-8') == mb_strlen($b, 'utf-8')) return 0;
if(mb_strlen($a, 'utf-8') > mb_strlen($b, 'utf-8')) return 1;
}
// Сортируем элементы массива с применением функции
usort($words, "mysort");
// Выводим результат сортировки
while(list($key, $val) = each($words))
{
echo "$val<br>";
}</span>


P.S. В том числе и для корректного отображения в различных кодировках.



Спустя 15 минут, 35 секунд (25.02.2010 - 13:40) sergeiss написал(а):
Цитата (baston @ 25.02.2010 - 14:25)
function mysort($a, $b)
{
if(mb_strlen($a, 'utf-8') < mb_strlen($b, 'utf-8')) return -1;
if(mb_strlen($a, 'utf-8') == mb_strlen($b, 'utf-8')) return 0;
if(mb_strlen($a, 'utf-8') > mb_strlen($b, 'utf-8')) return 1;
}

Последнюю строку можно упростить smile.gif Потому что ты туда попадешь только в случае, когда это условие уже выполняется. Поэтому вместо последней строки можно просто написать return 1;

Спустя 15 минут, 12 секунд (25.02.2010 - 13:56) baston написал(а):
Спасибо.
Значит ли это, что данное решение задачи верное в принципе? Или могут быть и другие варианты решения?

Спустя 51 минута, 26 секунд (25.02.2010 - 14:47) sergeiss написал(а):
В качестве альтернативы можно написать полностью свою функцию сортировки. И она будет работать! Даже можно несколько функций сделать, с разными алгоритмами сортировки.
Вот только зачем изобретать велосипед? Есть уже готовые функции, одну из которых ты взял и использовал по делу.

Спустя 3 минуты, 58 секунд (25.02.2010 - 14:51) baston написал(а):
ОК.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.