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

Форум PHP

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

 

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

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

тема: чтение из файла
 
 автор: gurza   (31.08.2005 в 19:47)   письмо автору
 
 

подскажите плиз
как из файла вытащить нужную инфу допустим по id
вот запись в файле

1|www.site.ru|название|
2|xxxx|xxxxxx|
3|xxxx|xxxxxx

где 1,2,3 - номер $id
www.site.ru- $url
название - $text

   
 
 автор: cheops   (31.08.2005 в 23:24)   письмо автору
 
   для: gurza   (31.08.2005 в 19:47)
 

Для начала следует прочитать файл при помощи функции file(), которая вернёт массив, каждый элемент которого будет содержать одну строку файла. Затем каждую строку следует разбить функцией explode() по симовлу | и сформировать новый массив, в качестве ключа которого будет id
<?php
  $arr 
file("text.txt");
  
// В цикле обходим массив $arr
  
froeach($arr as $line)
  {
     
$temp explode('|',$line);
     
// Формируем новый массив
     
$arr[$temp[0]]['url'] = $temp[1];
     
$arr[$temp[0]]['name'] = $temp[2];
  }
  
// Обращаемся к 4 строке файла
  
echo $arr[4]['name'];
?>

   
 
 автор: gurza   (01.09.2005 в 22:12)   письмо автору
 
   для: cheops   (31.08.2005 в 23:24)
 

а как вытащить все что соответствует $id1

   
 
 автор: cheops   (01.09.2005 в 22:13)   письмо автору
 
   для: gurza   (01.09.2005 в 22:12)
 

$id1 и $id - это одно и тоже?

   
 
 автор: gurza   (01.09.2005 в 23:10)   письмо автору
 
   для: cheops   (01.09.2005 в 22:13)
 

извиняюсь $id = 1
просто пытаюсь использовать файлы вместо БД
с БД знаю как делать запросы а с файлами столкнулся первый раз

вот мне надо вывести листинг по $id

   
 
 автор: cheops   (02.09.2005 в 12:34)   письмо автору
 
   для: gurza   (01.09.2005 в 23:10)
 

Если объём файла не большой, то можно воспользоваться старым кодом
<?php
  $id 
1
  
$arr file("text.txt"); 
  
// В цикле обходим массив $arr 
  
froeach($arr as $line
  { 
     
$temp explode('|',$line); 
     
// Формируем новый массив 
     
$arr[$temp[0]]['url'] = $temp[1]; 
     
$arr[$temp[0]]['name'] = $temp[2]; 
  } 
  
// Обращаемся к $id строке файла 
  
echo $arr[$id]['name']; 
?>

Если полностью сканировать весь файл, ради одного значения слишком накладно, то можно остановить цикл, как только будет найдено значение
<?php
  $id 
1
  
$arr file("text.txt"); 
  
// В цикле обходим массив $arr 
  
froeach($arr as $line
  { 
     
$temp explode('|',$line); 
     if(
$temp[0] == $id)
     {
        echo 
$temp[1]."<br>";
        echo 
$temp[2]."<br>";
        break; 
// Выходим из цикла
     
}
  } 
?>

   
 
 автор: gurza   (02.09.2005 в 14:28)   письмо автору
 
   для: cheops   (02.09.2005 в 12:34)
 

спасибо
токо не froeach а foreach

   
 
 автор: gurza   (06.09.2005 в 23:50)   письмо автору
 
   для: gurza   (02.09.2005 в 14:28)
 

подскажите плиз
как мне подсчитать общее кол-во записей в файле с одинаковым $id

   
 
 автор: cheops   (07.09.2005 в 00:46)   письмо автору
 
   для: gurza   (06.09.2005 в 23:50)
 

Не очень понятно, какой вопрос имеется ввиду:
1) В файле несколько записей с одинаковым id - нужно подсчтить их число?
2) Для каждого id существует несколько файлов - нужно подсчитать их число?

   
 
 автор: gurza   (07.09.2005 в 00:52)   письмо автору
 
   для: cheops   (07.09.2005 в 00:46)
 

1) В файле несколько записей с одинаковым id - нужно подсчтить их число?
вот это надо

   
 
 автор: cheops   (07.09.2005 в 02:36)   письмо автору
 
   для: gurza   (07.09.2005 в 00:52)
 

Это можно осуществить при помощи следующего скрипта
<?php 
  $id 
1;
  
$text file_get_contents("text.txt"); 
  
$text preg_match_all("#$id\|#i"$text$out); 
  echo 
count($out[0]);
?>

   
 
 автор: gurza   (07.09.2005 в 14:02)   письмо автору
 
   для: cheops   (07.09.2005 в 02:36)
 

большое спасибо

   
 
 автор: gurza   (07.09.2005 в 14:37)   письмо автору
 
   для: gurza   (07.09.2005 в 14:02)
 


<?

$arr 
file("txt/news.txt"); 
// В цикле обходим массив $arr 
 
foreach($arr as $line)
 { 
     
$temp explode('|',$line); 
$id $temp[0];
$text file_get_contents("txt/coment.txt"); 
  
$text preg_match_all("#$id\|#i"$text$out); 
  
 
$count count($out[0]);
  echo 
"<table width='96%' border=0>";
  
  
    echo 
"<tr><td><center><b>$temp[1]</b></center><br>$temp[2]<br><br><div align='right'><a href='index.php?id=coment&idn=$temp[0]'>Комментарии</a> ($count)</td></tr>";
  
  echo 
"</table>";

}

?>

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

   
 
 автор: Football   (07.09.2005 в 14:58)   письмо автору
 
   для: gurza   (07.09.2005 в 14:37)
 

Воспользуйтесь вместо цикла foreach циклом for, идущий в обратном порядке, предварительно посчитав кол-во новостей, они как я понимаю равны кол-ву массивов.

   
 
 автор: gurza   (07.09.2005 в 15:29)   письмо автору
 
   для: Football   (07.09.2005 в 14:58)
 

а примерчик плиз

   
 
 автор: cheops   (07.09.2005 в 20:22)   письмо автору
 
   для: gurza   (07.09.2005 в 15:29)
 

Т.е. используйте что-то вроде
<? 
$arr 
file("txt/news.txt"); 
// В цикле обходим массив $arr 
for($i count($arr) - 1$i >= 0$i++) 

     
$temp explode('|',$arr[0]); 
$id $temp[0]; 
$text file_get_contents("txt/coment.txt"); 
  
$text preg_match_all("#$id\|#i"$text$out); 
$count count($out[0]); 
  echo 
"<table width='96%' border=0>"
    echo 
"<tr><td><center><b>$temp[1]</b></center><br>$temp[2]<br><br><div align='right'><a href='index.php?id=coment&idn=$temp[0]'>Комментарии</a> ($count)</td></tr>"
  echo 
"</table>"

?>

   
 
 автор: gurza   (07.09.2005 в 20:45)   письмо автору
 
   для: cheops   (07.09.2005 в 20:22)
 

этот скрипт подвешивает комп
когда открываю страницу загрузка ЦПУ 100%

   
 
 автор: cheops   (08.09.2005 в 02:09)   письмо автору
 
   для: gurza   (07.09.2005 в 20:45)
 

А ну да так и должно быть при бесконечном цикле... исправьте пожалуйста строку
<?php
for($i count($arr) - 1$i >= 0$i++)
?>

следующим образом
<?php
for($i count($arr) - 1$i >= 0$i--)
?>

   
 
 автор: gurza   (08.09.2005 в 12:58)   письмо автору
 
   для: cheops   (08.09.2005 в 02:09)
 


$arr = file("txt/news.txt"); 
// В цикле обходим массив $arr 
for($i = count($arr) - 1; $i >= 0; $i--) 


     $temp = explode('|',$arr[0]); 
$id = $temp[0]; 
$text = file_get_contents("txt/coment.txt"); 
  $text = preg_match_all("#$id\|#i", $text, $out); 
$count = count($out[0]); 
  echo "<table width='96%' border=0>"; 
    echo "<tr><td><center><b>$temp[1]</b></center><br>$temp[2]<br><br><div align='right'><a href='index.php?id=coment&idn=$temp[0]'>Комментарии</a> ($count)</td></tr>"; 
  echo "</table>"; 



теперь выводит первую новость 2 раза

   
 
 автор: cheops   (08.09.2005 в 17:18)   письмо автору
 
   для: gurza   (08.09.2005 в 12:58)
 

Замените строку
<?php
     $temp 
explode('|',$arr[0]);
?>

на
<?php
     $temp 
explode('|',$arr[$i]);
?>

   
Rambler's Top100
вверх

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