|
|
|
| В файле имеются записи вида:
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 ? | |
|
|
|
|
|
|
|
для: Loneliness
(27.12.2007 в 21:39)
| | Не проще для этого использовать БД ? | |
|
|
|
|
|
|
|
для: Faraon
(27.12.2007 в 22:00)
| | К сожалению, для меня лично покамест не проще. :( Время поджимает, с БД я буду долго возиться. Это уже после, на досуге, буду переделывать по мере возможности. | |
|
|
|
|
|
|
|
для: Loneliness
(27.12.2007 в 22:31)
| | Можно конечно воспользоваться регулярками, но это это извращение, и только ли вам из этого файла надо конкретный год и месяц?. Для данного варианта оптимально использовать БД | |
|
|
|
|
|
|
|
для: 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. | |
|
|
|
|
|
|
|
для: Loneliness
(28.12.2007 в 02:22)
| | 27.12 00:37... - уже существующие записи, и такой формат определяете не вы? | |
|
|
|
|
|
|
|
для: sim5
(28.12.2007 в 02:37)
| | Нет, я могу делать записи и в ином формате, например писать в начале строки дату без часов и минут. Просто так было удобнее для последующего вывода. | |
|
|
|
|
|
|
|
для: Loneliness
(28.12.2007 в 02:42)
| | Вообще, если бы каждая строка имела уникальную дату (без учета часов и минут), то все было бы просто- вышенаписанный мной код, плюс с помощью strpos() определить соответствие даты записи строки с эталоном и задать переменную с номером этой строки. Проблема для меня в том, что с одинаковой датой может быть произвольное количество строк. | |
|
|
|
|
|
|
|
для: Loneliness
(28.12.2007 в 02:49)
| | А, кажется допетрил... break же можно сделать... | |
|
|
|
|
|
|
|
для: 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 при выводе, труда не составит. Ознакомтесь подробнее с функциями массива, там есть то, что поможет вам. | |
|
|
|