Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem z pętlą
Forum PHP.pl > Forum > Przedszkole
RaVeno
Mam problem z pętlą która ma usuwać wpisy z pliku, owszem usuwa, ale pojedynczo, tj. pętla po usunięciu wpisu kończyła by się, zamiast wrócić do początku. Powinno usunąć wszystkie wpisy spełniające warunek.

plik php
  1. <?php
  2. if(file_exists('vip.list'))
  3. {
  4. $vip = file('vip.list');
  5. $x = 0;
  6. for($i = 0; $i <= count($vip) - 1; $i++)
  7. {
  8. @$explode = explode(' || ', $vip[$i]);
  9. if(isset($explode[0]) && isset($explode[2]) && isset($explode[3]))
  10. {
  11. $end2 = round((strtotime(trim($data[3])) - strtotime(date('d.m.Y'))) / 86400);
  12. if($end <= 0)
  13. {
  14. $x = $x + 1;
  15. unset($vip[$i]);
  16. $vip = implode($vip);
  17. $file = fopen('vip.list', 'w+');
  18. fwrite($file, $vip);
  19. fclose($file);
  20. }
  21. }
  22. }
  23. echo 'Usunięto '.$x.' rekordów';
  24. }
  25. ?>


plik vip.list
Kod
Serwer || nick || 22.01.2012 || 25.02.2012
Serwer || nick1 || 22.01.2012 || 25.02.2012
Serwer || test2 || 22.01.2012 || 24.02.2012
Serwer || lalal || 24.01.2012 || 26.02.2012
Serwer || kotek || 24.01.2012 || 24.02.2012
Serwer || piesek || 22.01.2012 || 23.02.2012
Serwer || nick5 || 22.01.2012 || 22.02.2012
Serwer || kotali || 22.01.2012 || 21.02.2012
CuteOne
Ja bym to zrobił inaczej - zamiast usuwać coś z pliku stwórz sobie zmienną, która przechowa tylko te dane, które spełnią warunek. Warunek jest odwrotny do tego który masz w kodzie czyli zostawia tylko te wiersze, których ma nie usuwać.
  1. $content = ''
  2. if($end2 > 0) {
  3.  
  4. $content .= $vip[$i] . "\n\r"; // albo \r\n, \n juz nie pamietam ;p
  5. }
  6.  
  7. file_put_contents('vip.txt', $content);


ps. hmm if($end <= 0) ? a nie $end2?
RaVeno
Tak faktycznie tam jest $end wink.gif
OK, mam tak jak mi poleciłeś, jednak nie mam pojęcia dlaczego, ale nie dopisuje do pliku, chociaż zmienna przekazuje dane dobrze. Plik jest pusty po wywołaniu.

  1. <?php
  2. if(file_exists('vip.list'))
  3. {
  4. $vip = file('vip.list');
  5. $x = 0;
  6. for($i = 0; $i <= count($vip) - 1; $i++)
  7. {
  8. @$explode = explode(' || ', $vip[$i]);
  9. if(isset($explode[0]) && isset($explode[2]) && isset($explode[3]))
  10. {
  11. $end = round((strtotime(trim($explode[3])) - strtotime(date('d.m.Y'))) / 86400);
  12. $content = '';
  13. if($end > 0) {
  14. $x = $x+1;
  15. $content .= $vip[$i] . "\r\n";
  16.  
  17. }
  18. echo $content;
  19. file_put_contents('vip.txt', $content);
  20. }
  21. }
  22. echo 'Usunięto '.$x.' rekordów';
  23. }
  24. ?>
CuteOne
  1. if(file_exists('vip.list'))
  2. {
  3. $vip = file('vip.list');
  4. $x = 0;
  5. for($i = 0; $i <= count($vip) - 1; $i++)
  6. {
  7. @$explode = explode(' || ', $vip[$i]);
  8. if(isset($explode[0]) && isset($explode[2]) && isset($explode[3]))
  9. {
  10. $end = round((strtotime(trim($explode[3])) - strtotime(date('d.m.Y'))) / 86400);
  11. $content = '';
  12. if($end > 0) {
  13. $x = $x+1;
  14. $content .= $vip[$i] . "\r\n";
  15.  
  16. }
  17. echo $content;
  18. }
  19. }
  20. file_put_contents('vip.txt', $content);
  21. echo 'Usunięto '.$x.' rekordów';
  22. }
RaVeno
Tak też już próbowałem...
CuteOne
  1. if(file_exists('vip.list'))
  2. {
  3. $vip = file('vip.list');
  4. $x = 0;
  5. $content = '';
  6. for($i = 0; $i <= count($vip) - 1; $i++)
  7. {
  8. @$explode = explode(' || ', $vip[$i]);
  9. if(isset($explode[0]) && isset($explode[2]) && isset($explode[3]))
  10. {
  11. $end = round((strtotime(trim($explode[3])) - strtotime(date('d.m.Y'))) / 86400);
  12.  
  13. if($end > 0) {
  14. $x = $x+1;
  15. $content .= $vip[$i] . "\r\n";
  16.  
  17. }
  18. echo $content;
  19. }
  20. }
  21. file_put_contents('vip.txt', $content);
  22. echo 'Usunięto '.$x.' rekordów';
  23. }
RaVeno
Dzięki wielkie, teraz działa! cool.gif
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.