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

Форум PHP

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

 

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

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

тема: Проблема с сортировкой и файлом...
 
 автор: Front   (27.09.2006 в 17:24)   письмо автору
 
 

Короче, есть файл 1.txt:
1;Груша;Банан
2;Дыня;Яблоко
3;Клубника;Арбуз

Я сортирую его по 3 значению т.е. в итоге получается:
3;Клубника;Арбуз.
1;Груша;Банан
2;Дыня;Яблоко

Но сам файл после сортировки, меняется. Как сделать так чтобы данные можно было сортировать, но файл оставался в оригинале?

Скрипт:

<?php
define("FILE_NAME",'test.txt');
$arr = file(FILE_NAME);

foreach($arr as $item){
list($key,$value,$metr) = explode(";",$item);
$metr = rtrim($metr);
$index = $value;
$index = strtolower($metr);
$ret[$index] = $key.";".$value.";".$metr;
}
ksort($ret);
$handler = fopen(FILE_NAME,'w+');
fwrite($handler,implode("\n",$ret)."\n");
fclose($handler);
?>

   
 
 автор: kasmanaft   (27.09.2006 в 19:06)   письмо автору
 
   для: Front   (27.09.2006 в 17:24)
 

Вот этот кусок записывает в файл обновленный массив:

* * *
$handler = fopen(FILE_NAME,'w+'); 
fwrite($handler,implode("\n",$ret)."\n"); 
fclose($handler); 
?>

Его можно убрать?

   
 
 автор: Front   (27.09.2006 в 21:00)   письмо автору
 
   для: kasmanaft   (27.09.2006 в 19:06)
 

Да этот кусок впринципе не нужен, вообще содержимое файла не должно меняться. Нужна только сортировка файла, которая будет отображаться в браузере...

Скрипт которым вывожу содержимое файла в окно браузера после сортировки:

<?php
$filename = "test.txt";
if (file_exists($filename)) {
$file = file($filename);
if (count($file) !== 0) {
echo("<table class=1 cellpadding=3 cellspacing=2 border=\"0\">");
foreach ($file as $line) {
$line = explode(";", $line);
echo("<tr><td>".$line[0]."</td>");
echo("<td>".$line[1]."</td>");
echo("<td>".$line[2]."</td></tr>");

}
echo("</table>");
}}
?>

   
 
 автор: kasmanaft   (27.09.2006 в 23:04)   письмо автору
 
   для: Front   (27.09.2006 в 21:00)
 

В итоге у вас должно получиться что-то типа:

<?php 
define
("FILE_NAME",'test.txt'); 
$arr file(FILE_NAME); 

foreach(
$arr as $item){ 
list(
$key,$value,$metr) = explode(";",$item); 
$metr rtrim($metr); 
$index $value
$index strtolower($metr); 
$ret[$index] = $key.";".$value.";".$metr

$file ksort($ret); 

if (
count($file) !== 0) { 
echo(
"<table class=1 cellpadding=3 cellspacing=2 border=\"0\">"); 
foreach (
$file as $line) { 
$line explode(";"$line); 
echo(
"<tr><td>".$line[0]."</td>"); 
echo(
"<td>".$line[1]."</td>");
echo(
"<td>".$line[2]."</td></tr>");


echo(
"</table>"); 
}}
?>

   
 
 автор: Front   (28.09.2006 в 10:40)   письмо автору
 
   для: kasmanaft   (27.09.2006 в 23:04)
 

Непонятно с чем это связано, но выдает ошибку типа: Invalid argument supplied for foreach() во втором цилке. Но это при условии, что я убираю 1 скобку после echo("</table>");. Если не убираю ее, то он ругается: parse error.

   
 
 автор: kasmanaft   (28.09.2006 в 13:47)   письмо автору
 
   для: Front   (28.09.2006 в 10:40)
 

Да это я глупость написал :)

$file = ksort($ret); 

Нужно заменить на что-то типа:

$file = $ret; 
ksort($file); 


Или ... лучше даже так:
ksort($ret);  
if (count($ret) !== 0) {  
echo("<table class=1 cellpadding=3 cellspacing=2 border=\"0\">");  
foreach ($ret as $line) {  
$line = explode(";", $line);  
echo("<tr><td>".$line[0]."</td>");  
echo("<td>".$line[1]."</td>"); 
echo("<td>".$line[2]."</td></tr>");

   
 
 автор: Front   (28.09.2006 в 14:27)   письмо автору
 
   для: kasmanaft   (28.09.2006 в 13:47)
 

Все заработало, огромное спасибо за помощь!!!!
А возможно к этой сортировке прибавить выборку, ну допустим по названию фрукта, чтобы в результатах была только одна строчка таблицы с названием этого фрукта?

   
 
 автор: kasmanaft   (28.09.2006 в 16:41)   письмо автору
 
   для: Front   (28.09.2006 в 14:27)
 

Что-то такое?

<?php
define
("FILE_NAME",'test.txt');
$arr file(FILE_NAME);
$frukt 'Дыня';
foreach(
$arr as $item){
   list(
$key,$value,$metr) = explode(";",$item);
   if (
$value == $frukt)
   {
      
$metr rtrim($metr);
      
$index $value;
      
$index strtolower($metr);
      
$ret[$index] = $key.";".$value.";".$metr;
   }
}
* * * *

   
 
 автор: Front   (28.09.2006 в 17:33)   письмо автору
10.2 Кб
 
   для: kasmanaft   (28.09.2006 в 16:41)
 

А вообще этот скрипт (сортировки а не выборки) можно применить к более длинной строке, я имею в виду, типа:
1;Груша;Банан;Яблоко;Помидор
2;Арбуз;Дыня;Манго;Огурец
3;Тыква;Свекла;Лук;Чеснок
Только надо увеличить кол-во переменных типа:

list($key,$value,$metr,$fut,$mut) = explode(";",$item);
if ($value == $frukt)
{
$metr = rtrim($metr);
$index = $value;
$index = strtolower($metr);
$ret[$index] = $key.";".$value.";".$metr.";".$fut.";".$mut;
Правильно?
И вообще дам весь расклад:
На самом деле есть файл stroy.txt (вложенный):
Я хочу сортировать его по разным полям (в зависимости от прописанных в скрипте):
Вот сам скрипт:
<?php
define("FILE_NAME",'stroy.txt');
$arr = file(FILE_NAME);
foreach($arr as $item){
list($key,$value,$metr,$dik,$dim,$sik,$sim,$mir,$mik,$vik,$vir,$vis,$vin,$vil,$vim) = explode(";",$item);
$metr = rtrim($metr);
$index = $metr;
$index = strtolower($metr);
$ret[$index] = $key.";".$value.";".$metr.";".$dik.";".$dim.";".$sik.";".$sim.";".$mir.";".$mik.";".$vik.";".$vir.";".$vis.";".$vin.";".$vil.";".$vim;
}
ksort($ret);
if (count($ret) !== 0) {
# выведем таблицу в цикле
echo("<table class=1 cellpadding=3 cellspacing=2 border=\"0\">");
echo("<tr><td class=1>".Район."</td>");
echo("<td class=1>".Комнат."</td>");
echo("<td class=1>".Адрес."</td>");
echo("<td class=1>".Этаж."</td>");
echo("<td class=1>".Общая."<br>".площадь."</td>");
echo("<td class=1>".Жилая."<br>".площадь."</td>");
echo("<td class=1>".Кухня."</td>");
echo("<td class=1>".Метро."</td>");
echo("<td class=1>".Тип."<br>".дома."</td>");
echo("<td class=1>".Санузел."</td>");
echo("<td class=1>".Контакты."</td>");
echo("<td class=1>".Цена."</td>");
echo("<td class=1>".Срок."<br>".сдачи."</td>");
echo("<td class=1>".Дополнительно."</td></tr>");
// пишем в файл
foreach ($ret as $line) {
$line = explode(";", $line);
echo("<tr><td>".$line[0]."</td>");
echo("<td>".$line[1]."</td>");
echo("<td>".$line[2]."</td>");
echo("<td>".$line[3]."</td>");
echo("<td>".$line[4]."</td>");
echo("<td>".$line[5]."</td>");
echo("<td>".$line[6]."</td>");
echo("<td>".$line[7]."</td>");
echo("<td>".$line[8]."</td>");
echo("<td>".$line[9]."</td>");
echo("<td>".$line[11]."</td>");
echo("<td>".$line[12].+.0.+.0."</td>");
echo("<td>".$line[13]."</td>");
echo("<td>".$line[14]."</td></tr>");

}
echo("</table>");
?>
Почему то когда меняю переменную он всегда разные результаты выдает...

   
 
 автор: kasmanaft   (28.09.2006 в 19:05)   письмо автору
 
   для: Front   (28.09.2006 в 17:33)
 

>>И вообще дам весь расклад:
>>На самом деле есть файл stroy.txt (вложенный):
А я всё понять не могу, что за бананы ... сортировка какая-то непонятная .. =))

>>Почему то когда меняю переменную он всегда разные результаты выдает...
Передавая переменную для сортировки, вы передаете ключ массива ... если такой ключ в массиве уже есть, все что за ним было записано, заменится ...

можно сделать что-нить такое:

<?
* * * * * * *
$index strtolower($key);
if (isset(
$ret[$index]))
    while(isset(
$ret[$index]))
           
$index .= '.';
$ret[$index] = $key.";".$value.";".$m * * * * * * *
* * * * * * *

   
 
 автор: Front   (29.09.2006 в 10:33)   письмо автору
 
   для: kasmanaft   (28.09.2006 в 19:05)
 

Благодярю за помощь, очень помогли, просто супер... :-))))

Но возник еще вопрос, понимаю что надоел, но пробовал разными методами и GET И POST но сортировка, при нажатии на название столбца не получается... Может подскажите чего-нибудь

   
Rambler's Top100
вверх

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