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

Форум PHP

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

 

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

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

тема: Выборка элементов из массива по признакам
 
 автор: Loneliness   (27.12.2007 в 21:39)   письмо автору
 
 

В файле имеются записи вида:

27.12 00:37</td><td>1171</td><td>1.5</td><td>MDFOTO</td><td>1234567890</td><td>Tester</td></tr>
27.12 00:37</td><td>1171</td><td>1.5</td><td>MDFOTO</td><td>1234567890</td><td>Tester</td></tr>
26.12 00:37</td><td>1171</td><td>1.5</td><td>MDFOTO</td><td>1234567890</td><td>Tester</td></tr>
...
25.12 00:38</td><td>1171</td><td>1.5</td><td>MDFOTO</td><td>1234567890</td><td>Tester</td></tr>
21.12 00:49</td><td>1171</td><td>1.5</td><td>MDFOTO</td><td>1234567890</td><td>Tester</td></tr>
21.12 00:49</td><td>1171</td><td>1.5</td><td>MDVIDEO</td><td>1234567890</td><td>Tester</td></tr>
.............

То есть в начале каждой строки стоит дата. Подскажите, как вывести из массива file("myfile.dat"); строки за нужный период- скажем, с первой строки, записанной 27.12 до первой строки записанной 21.12 ?

   
 
 автор: Faraon   (27.12.2007 в 22:00)   письмо автору
 
   для: Loneliness   (27.12.2007 в 21:39)
 

Не проще для этого использовать БД ?

   
 
 автор: Loneliness   (27.12.2007 в 22:31)   письмо автору
 
   для: Faraon   (27.12.2007 в 22:00)
 

К сожалению, для меня лично покамест не проще. :( Время поджимает, с БД я буду долго возиться. Это уже после, на досуге, буду переделывать по мере возможности.

   
 
 автор: Faraon   (27.12.2007 в 23:06)   письмо автору
 
   для: Loneliness   (27.12.2007 в 22:31)
 

Можно конечно воспользоваться регулярками, но это это извращение, и только ли вам из этого файла надо конкретный год и месяц?. Для данного варианта оптимально использовать БД

   
 
 автор: Loneliness   (28.12.2007 в 02:22)   письмо автору
 
   для: Faraon   (27.12.2007 в 23:06)
 

Ну регулярки по-моему вовсе не обязательно. Просто сделать из каждой строки массив и сравнивать первый элемент. Что-то вроде:

<?
$file_arr 
file("myfile.dat");
for(
$i=0$i <= sizeof($file_arr); $i++)
{
$str_arr explode("</td><td>"$file_arr[$i]);
$date_str $str_arr[0];
}
?>


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

P.S Я безусловно понимаю, что БД для такой задачи оптимальный вариант, но мне БД реально неприемлемо по двум причинам- я не имел с ними дела вообще (хотя начинать конечно когда то надо) и нет сейчас времени вникать+ скрипт для распространения wap-мастерам, а из них больше половины будет на халявных хостингах типа h2m с php но без MYSQL.

   
 
 автор: sim5   (28.12.2007 в 02:37)   письмо автору
 
   для: Loneliness   (28.12.2007 в 02:22)
 

27.12 00:37... - уже существующие записи, и такой формат определяете не вы?

   
 
 автор: Loneliness   (28.12.2007 в 02:42)   письмо автору
 
   для: sim5   (28.12.2007 в 02:37)
 

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

   
 
 автор: Loneliness   (28.12.2007 в 02:49)   письмо автору
 
   для: Loneliness   (28.12.2007 в 02:42)
 

Вообще, если бы каждая строка имела уникальную дату (без учета часов и минут), то все было бы просто- вышенаписанный мной код, плюс с помощью strpos() определить соответствие даты записи строки с эталоном и задать переменную с номером этой строки. Проблема для меня в том, что с одинаковой датой может быть произвольное количество строк.

   
 
 автор: Loneliness   (28.12.2007 в 02:52)   письмо автору
 
   для: Loneliness   (28.12.2007 в 02:49)
 

А, кажется допетрил... break же можно сделать...

   
 
 автор: sim5   (28.12.2007 в 02:57)   письмо автору
 
   для: Loneliness   (28.12.2007 в 02:49)
 

Тогда лучше писать в формате time(), тогда после file(), сформируете массив:

array(1198799472=>(array(0=>1171, 1=>1.5, 2=>'MDFOTO', 3=>1234567890, 4=>'Tester')),
      1198799488=>(array...));

Тогда легче будет управлять массивом, а преобразовать time в date при выводе, труда не составит. Ознакомтесь подробнее с функциями массива, там есть то, что поможет вам.

   
Rambler's Top100
вверх

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