Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]filtrowanie wyświetlanej treści ?
Forum PHP.pl > Forum > Przedszkole
czezz
To jest zawartość pliku: plik.txt
  1. "test balblablaa"
  2. "x balblablaa"
  3. "itrelemoreletest balblablaa"
  4. "test balblablaa2"


To jest kod, który wyświetla zawartość pliku plik.txt:
  1. <?php
  2. $plik = file('plik.txt');
  3. foreach($plik as $i => $linia) {
  4. $plik[$i] = trim($linia);
  5. }
  6.  
  7. print '<pre>';
  8. print_r($plik);
  9. print '</pre>';
  10. ?>


Pytanie:
Czy da się, w któryś miejscu tego kodu ustawić filtr tak aby wyświetlane były tylko wiersze, które zawierają ciąg znaków "test" ?
Tak ja w bash'u użył bym # grep test /tmp/plik.txt
zordon
zastosuj np strpos
czezz
strpos() - nie działa tak jak chce. Zamiast wyniku wyświetla liczby.
Znalazłem preg_match() ale też coś jest nie tak:

  1. <?php
  2. $plik = file('plik.txt');
  3. foreach($plik as $i => $linia) {
  4. $plik[$i] = preg_match('/test/', trim($linia));
  5. }
  6.  
  7. print '<pre>';
  8. print_r($plik);
  9. print '</pre>';
  10. ?>


Ta funkcja działa prawie dobrze. Prawie bo zwraca wynik 0 lub 1.
Jak to zamienić na wynik rzeczywisty.
kadlub
  1. <?php
  2. $plik = file('plik.txt');
  3. foreach($plik as $i => $linia) {
  4. if(strpos($linia,'test')){
  5. $odczytany[$i] = trim($linia);
  6. }
  7. }
  8.  
  9. print '<pre>';
  10. print_r($odczytany);
  11. print '</pre>';
  12. ?>
  13.  
nospor
Zajrzyj do manuala:
http://pl2.php.net/preg_match
Przeciez masz tam to wszystko napisane.
zordon
  1. $plik = file('plik.txt');
  2. foreach($plik as $i => $linia) {
  3. if (strpos($linia, 'test') !== false){
  4. $plik[$i] = $linia;
  5. }else{
  6. unset($plik[$i]);
  7. }
  8. }
  9.  
  10. print '<pre>';
  11. print_r($plik);
  12. print '</pre>';
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.