Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ответ 004 на задачу N 7
 
 автор: SoftTime   (17.02.2006 в 13:14)   письмо автору
 
 

Ответ 004 на задачу N 7.
С условиями задачи можно ознакомится по ссылке.
Здравствуйте! Укажите, пожалуйста, ошибки и недочёты, я ведь всего второй день, как изучаю PHP.

Файл mixture.php :


<?php
//скрипт mixture.php
$filename='1.txt';
//START    чтение файла в массив
$massiv=file($filename);
//Рассортировываем массив в случайном порядке
shuffle($massiv);
//Открываем файл для записи
$file=fopen($filename,"w");
//Записываем в файл
foreach ($massiv as $line_num => $line)
{
    
fwrite($file,$line);
}
//Закрываем файл
fclose($file);
?>

++++++++++++++++++++++++++++++++++++++++
Файл ordernum.php :


<?php
//скрипт ordernum.php
$filename='1.txt';
//START    чтение файла в массив
$massiv=file($filename);
//Сортируем массив
natsort($massiv);
//Открываем файл для записи
$file=fopen($filename,"w");
//Записываем в файл
foreach ($massiv as $line_num => $line)
{
    
fwrite($file,$line);
}
//Закрываем файл
fclose($file);
?>

================================================
Файл orderalph.php :


<?php
//скрипт orderalph.php
$filename='1.txt';
//START    чтение файла в массив
$massiv=file($filename);
foreach (
$massiv as $line_num => $line)
{
    
//Разбиваем строку на 2 части
    
$tmp=explode(" ",$line);
    
//Порядковый номер языка
    
$massivtmp1[$line_num]=$tmp[0];
    
//Название языка
    
$massivtmp2[$line_num]=$tmp[1];
    
//Переводим названия языков в нижний регистр для
    //правильной сортировки по алфавиту
    
$massivtmp3[$line_num]=strtolower($tmp[1]);
}
//Сортировка по алфавиту
array_multisort($massivtmp3,$massivtmp1,$massivtmp2);
//Открываем файл для записи
$file=fopen($filename,"w");
//Записываем в файл порядковый номер и название языка
foreach ($massivtmp2 as $line_num => $line)
{
    
$stroka=sprintf("%s %s",$massivtmp1[$line_num],$line);
    
fwrite($file,$stroka);
}
//Закрываем файл
fclose($file);
?>

================================================================

http://www.softtime.ru/info/task.php?id_article=77

   
 
 автор: cheops   (20.02.2006 в 00:16)   письмо автору
 
   для: SoftTime   (17.02.2006 в 13:14)
 

Очень хорошая читабельность и построение программы, однако $massivtmp3 следует избегать - т.е. лучше стараться давать переменным осмысленные имена. Однако после использования mixture.php получил следующее
1 Fort 
2 PHP 
7 C++ 
6 Perl 
9 Fortran 
10 Assembler5 Java 
3 JavaScript 
4 ASP.NET 
8 Pascal 

Это связано с тем, что в моём файле последняя запись не завершалась переводом строки, скрипт это не учитывает. Хм... однако скрипт orderalph.php привёл к результату
4 ASP.NET10 Assembler7 C++1 Fort9 Fortran5 Java3 JavaScript8 Pascal6 Perl2 PHP

Хм... пропали почему-то переводы строк. Вы какую версию PHP использовали и где тестировали скрипт? Меня удивляет что это второй случай...

   
 
 автор: Andrey_sam   (20.02.2006 в 17:38)
 
   для: cheops   (20.02.2006 в 00:16)
 

Здравствуйте, cheops.
Я тестировал эти скрипты на Денвер-2 2005-10-07. Версия PHP 4.4.0. Операционная система Windows 2000 (если это имеет какое-либо значение). Всё работает нормально.
Напишите, пожалуйста, в чём может быть проблема.

   
 
 автор: cheops   (20.02.2006 в 22:09)   письмо автору
 
   для: Andrey_sam   (20.02.2006 в 17:38)
 

Да, это судя по всему особенности функции array_multisort(), которая в разных версиях либо сохраняет переводы строк, либо удаляет их. Для того, чтобы не зависеть от реализации библиотек и версии PHP, лучше явно удалять все пробельные символы с начала и конца строки при помощи функции trim() и присоединять переводы строк \r\n при записи в файл явно.

   
 
 автор: Andrey_sam   (21.02.2006 в 00:09)
 
   для: cheops   (20.02.2006 в 22:09)
 

cheops, спасибо за помощь!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования