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

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

 

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

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

тема: Ответ 007 на задачу N 7
 
 автор: SoftTime   (18.02.2006 в 07:51)   письмо автору
 
 

Ответ 007 на задачу N 7.
С условиями задачи можно ознакомится по ссылке.
Предположим, имя файла - "file.txt".
Тогда
mixture.php:

<?php
//Получаем массив из строк файла
$arr file('file.txt');
//Подключаем генератор
mt_srand(time()*100000);
//Перемешиваем
shuffle($arr);
//Переводим в строку для удобства записи
$for_write '';
foreach(
$arr as $row) {
  
$for_write $for_write.$row;
}
//Записываем
$open fopen('file.txt''w');
fwrite($open$for_write);
fclose($open);
?>


ordernum.php:

<?php
//Получаем массив из строк файла
$arr file('file.txt');
//Перегоняем в массив вида число => название языка
foreach($arr as $row) {
  list(
$num$lang) = explode(" "$row);
  
$new_arr[$num] = $lang;
}
//Сортируем по ключам
ksort($new_arr);
//Преобразуем в строку для удобства записи
$for_write '';
foreach(
$new_arr as $key => $value) {
  
$for_write $for_write.$key." ".$value;
}
//Записываем
$open fopen('file.txt''w');
fwrite($open$for_write);
fclose($open);
?>


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

   
 
 автор: cheops   (20.02.2006 в 00:37)   письмо автору
 
   для: SoftTime   (18.02.2006 в 07:51)
 

Всё компактно... После использования mixture.php получил следующее
9 Fortran 
3 JavaScript 
2 PHP 
10 Assembler7 C++ 
8 Pascal 
5 Java 
6 Perl 
4 ASP.NET 
1 Fort 

Это связано с тем, что в моём файле последняя запись не завершалась переводом строки, скрипт это не учитывает.
После сортировки получил файл
1 Fort2 PHP3 JavaScript4 ASP.NET5 Java6 Perl7 C++8 Pascal9 Fortran10 Assembler

Т.е. переводов строк нет и повторно скрипт нельзя использовать - это серьёзный недочёт, так как изменяется структура файла.

Кроме того, скриптов должно было быть три штуки, не хватает сортировки по алфавиту.

   
 
 автор: ck   (20.02.2006 в 05:12)   письмо автору
 
   для: cheops   (20.02.2006 в 00:37)
 

У меня почему-то результат другой. Остался пробел в первом результате:

3 JavaScript
7 C++
2 PHP
1 Fort
4 ASP.NET
9 Fortran
6 Perl
10 Assembler
5 Java
8 Pascal

и все пробелы во втором:

1 Fort
2 PHP
3 JavaScript
4 ASP.NET
5 Java
6 Perl
7 C++
8 Pascal
9 Fortran
10 Assembler

Не подскажете, в чем может быть дело?

Инетересно еще, что когда добавлял знак перехода строки в oredernum.php, с этими пробелами возникала полная путаница. В блокноте, во вском случае. Причем и в варианте с *-никсовским переводом и с \r\n. Для меня так и осталось необъяснимым, почему, - и почему он у меня работает так. То есть откуда, собственно, переводы строк берутся в ordernum.php?

   
 
 автор: cheops   (20.02.2006 в 13:42)   письмо автору
 
   для: ck   (20.02.2006 в 05:12)
 

Проблема в том, что переводы строк могут как быть оставлены функциями, так и удалены, на всякий случай их следует удалять при помощи функции trim() и вставлять свои - это полностью решит проблему.

   
 
 автор: udaf   (20.02.2006 в 00:49)   письмо автору
 
   для: SoftTime   (18.02.2006 в 07:51)
 

ordernum.php:

foreach($new_arr as $key => $value) { 
  $for_write = $for_write.$key." ".$value; 
}

по моему при первом проходе номером строки будет ноль?
а в примере нет нуля там строки умеруются с единицы
и нет разделителя строк

   
Rambler's Top100
вверх

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