Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Сортировка массива... Трабла...


Автор: immax 1.11.2007, 01:20
Доброго всем времени суток. Чтобы упростить объяснение проблемы, приведу сразу пример:
Есть скажем файл text.txt  следующего содержания:
Код

c
a
b
d
a

Всё это надо отсортировать по алфавиту.
Пишу простейший код:
Код

$file=file("text.txt");
sort($file);
$f=fopen('text.txt', 'w+');
while (list($k, $v) = each($file)) {fputs($f, $v);}
fclose($f);

Результат вот такой:
Код

aa
b
c
d



При сортировке массива две строки слепливаются в одну. При этом одна строка остаётся пустой. Как этого избежать? Это, по всему видимому, из-за отсутствия переноса в последней строке исходного файла. что посоветуете, чтобы сортировка всегда проходила гладко?

Автор: Sannis 1.11.2007, 01:58
Зависит от цели и остального кода smile 

Можно попробывать заменить
Код

fputs($f, $v);

на
Код

fputs($f, str_replace("\n", "", $v)."\n");

или
Код

fputs($f, trim($v)."\n");

В таком случае правда в конце файла будет (возможно лишний) перевод строки.

Автор: SelenIT 1.11.2007, 02:13
Код

$lines = array_map('trim', file("text.txt"));
sort($lines);
file_put_contents("text.txt", implode("\n", $lines));

Автор: immax 1.11.2007, 21:55
2SelenIT
Гхм, насколько проще, а выполняется у меня чуть медленнее, чем с циклом... но главное работает как надо... Спасибо, краткость и в коде-сестра таланта =)
ЗЫ
Не все ещё перешли на пхп5 =)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)