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

Форум PHP

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

 

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

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

тема: Сортировка файлов по количеству в них строк в порядке убывания.
 
 автор: Посетитель   (29.05.2005 в 21:28)
 
 

есть скрипт


<?php

if ($p=="")
{
$d='1';
}
else
{
$d $p;
}
$papka './';
if (
$handle opendir("$papka"))
{
while (
false !== ($f readdir($handle)))
{
if (
$f != "." && $f != ".." && $f != ".htaccess" && $f != "index.php")
$file[] = $f;
}
closedir($handle);
}
$count count($file);
$f '10';
$obsum $d $f;
$nasum $obsum $f;
$date=date("d.m.y-H:i");
print 
"$date<br/>";
print 
"(Всего файлов - $count)<br/>";
for(
$i=$nasum$i$obsum$i++)
{
if(!isset(
$file[$i]))
{
$s=''; break;
}
else
{
$fi file($file[$i]);
$coun count($fi);
$fil substr($file[$i], 0, - 4);
print 
$fil."-($coun)<br/>";
}
}
if(isset(
$s))
{
print 
"<a href=\"index.php?p=1\">Начало</a>";
}else{
$d $d+1;
print 
"<a href=\"index.php?p=".$d."\">далее</a>";
}
?>

он выводит постранично файлы которые есть в папке.
мне надо чтобы все файлы которые есть в папке отсортировались в порядке убывания по количеству строк в файлах.
все файлы txt
Подскажите плз.

   
 
 автор: cheops   (29.05.2005 в 23:13)   письмо автору
 
   для: Посетитель   (29.05.2005 в 21:28)
 

Для этого, нужно открыть каждый файл из массива $file и подсчитать число строк, затем сформировать ассоциативный массив, где в качестве ключа выступает имя файла, а в качестве значения число строк в нём и отсортировать с сохранением отношения индекс-значение
<?php
  
foreach($file as $filename)
  {
    
// Открываем файл при помощи функции
    // file, которая возвращает массив,
    // каждый элемент которой соответствует
    // отдельной строки
    
$arr file($filename);
    
// Подсчитываем число строк в файле 
    
$total count($arr);
    
// Массив удаляем 
    
unset($arr);
    
// Вместо массива $file формируем новый
    // массив $filecount, в качестве ключей 
    // которых используются имена файлов, а
    // значений число файлов
    
$filecount[$filename] = $total;
  }
  
// Массив $filecount сортируем с сохранением
  // отношения индекс-значение
  
asort($filecount);
?>

Так как полученный массив $filecount является ассоциативным выводить его лучше при помощи цикла foreach
<?php
  
foreach($filename as $name => $total)
  {
     echo 
"Имя файла - $name, число строк - $total<br>";
  }
?>

   
 
 автор: посетитель   (30.05.2005 в 00:12)
 
   для: cheops   (29.05.2005 в 23:13)
 

У вас ошибочка не

<?php 
  
foreach($filename as $name => $total
  { 
     echo 
"Имя файла - $name, число строк - $total<br>"
  } 
?>

а

<?php 
  
foreach($filecount as $name => $total
  { 
     echo 
"Имя файла - $name, число строк - $total<br>"
  } 
?>

он выводит всё на одну страницу а как мне теперь это впихнуть комне чтоб постранично?
и помоему он сортирует не в порядке убывания.
извените я тока учусь.

   
 
 автор: cheops   (30.05.2005 в 00:19)   письмо автору
 
   для: посетитель   (30.05.2005 в 00:12)
 

>У вас ошибочка не
Ага есть такое дело...

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

>он выводит всё на одну страницу а как мне теперь это
>впихнуть комне чтоб постранично?
Теперь следует поставить счётчик в цикл и смотреть за ним
<?php
  $i 
= -1;
  foreach(
$filecount as $name => $total
  { 
     
$i++;
     if(
$i <= $nasum) continue;
     if(
$i $obsum) break;
     echo 
"Имя файла - $name, число строк - $total<br>"
  }
?>

   
 
 автор: Посетитель   (06.06.2005 в 16:45)
 
   для: cheops   (29.05.2005 в 23:13)
 

Ещё вопросик
С этим я разобрался!

<?php 
  
foreach($file as $filename
  { 
$arr file($filename); 
    
$total count($arr); 
    unset(
$arr); 
  
$filecount[$filename] = $total
  } 
  
asort($filecount); 
?> 
А теперь надо бы не просто посчитать строки а только те строки в которых $out[5]
 будет равно *-off 
я считал так:
$lines = file($fil);
foreach($lines as $line)
{
preg_match("|^([^ ]+) = ([^ ]+) = ([^ ]+) = ([^ ]+) = ([^ ]+) = ([^\n]+)|i", $line, $out);
if($out[5] == '*-off' )
{
$file[] .= $out[2].",";
}
}
$count = count($file);


но мнеже надо посчитать в каждом файле из каталога непойму как

   
 
 автор: cheops   (06.06.2005 в 19:09)   письмо автору
 
   для: Посетитель   (06.06.2005 в 16:45)
 

А вы откройте каталог при помощи связки функций opendir() + readdir(), так как это описывается в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=4025 и примените к каждому из них ваш скрипт.

   
Rambler's Top100
вверх

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