Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Porównanie napisów - nie działa
Forum PHP.pl > Forum > Przedszkole
agrutko
Witam wszystkich serdecznie smile.gif)

Mam elementarny problem z porównywaniem napisów. Oto zawartość plików:

test.txt:

aa;bb
cc;dd

test.php:
  1. <?php
  2. $plik = file("test.txt");
  3. $wiersz = explode(";",$plik[0]);
  4. if($wiersz[0]=="aa")
  5. echo "TO SAMO<br/>";
  6. if($wiersz[1]=="bb")
  7. echo "PONOWNIE TO SAMO<br/>";
  8. if(!strcmp($wiersz[0],"aa"))
  9. echo "TO SAMO<br/>";
  10. if(!strcmp($wiersz[1],"bb"))
  11. echo "PONOWNIE TO SAMO<br/>";
  12. ?>


Otwarcie tego skryptu w przeglądarce wita mnie pustym ekranem mimo że powinno być dwa razy "TO SAMO". Dlaczego?

PS. Gdy przed instrukcjami warunkowymi dodałem:
$wiersz[0] = trim($wiersz[0]);
$wiersz[1] = trim($wiersz[1]);
to dwa razy wyświetlił PONOWNIE TO SAMO. Czyli, że porównanie "bb" z pliku z "bb" w skrypcie się powodzi, ale "aa" już nie.
klima06
Usuń enter na początku pliku txt lub zwiększ index w linijce 3, a będzie działać tak jak chcesz wink.gif
agrutko
Na początku pliku txt nie ma entera, a $wiersz[0] i $wiersz[1] przechowują odpowiednio "aa" i "bb" (wyświetliłem je dla testu) - czyli tak jak zakładam sad.gif

Skrypt z testowym fragmentem:

  1. <?php
  2. $plik = file("test.txt");
  3. $wiersz = explode(";",$plik[0]);
  4. $wiersz[0] = trim($wiersz[0]);
  5. $wiersz[1] = trim($wiersz[1]);
  6. echo $wiersz[0]." ".$wiersz[1]."<br/>";
  7. if($wiersz[0]=="aa")
  8. echo "TO SAMO<br/>";
  9. if($wiersz[1]=="bb")
  10. echo "PONOWNIE TO SAMO<br/>";
  11. if(!strcmp($wiersz[0],"aa"))
  12. echo "TO SAMO<br/>";
  13. if(!strcmp($wiersz[1],"bb"))
  14. echo "PONOWNIE TO SAMO<br/>";
  15. ?>


Wynik to:

aa bb
PONOWNIE TO SAMO
PONOWNIE TO SAMO
klima06
Coś Ci PHP świruje, bo u mnie wszystko dobrze działa.
Potwierdzenie:

test.php
  1. <?php
  2. $plik = file("test.txt");
  3. $wiersz = explode(";",$plik[0]);
  4. if($wiersz[0]=="aa")
  5. echo "TO SAMO<br/>";
  6. if($wiersz[1]=="bb")
  7. echo "PONOWNIE TO SAMO<br/>";
  8. if(!strcmp($wiersz[0],"aa"))
  9. echo "TO SAMO<br/>";
  10. if(!strcmp($wiersz[1],"bb"))
  11. echo "PONOWNIE TO SAMO<br/>";
  12. ?>


test.txt
Kod
aa;bb
cc;dd


Output:
Kod
TO SAMO
TO SAMO


@edit
A spróbuj zamienić "==" na "===" wink.gif
SmokAnalog
Musisz pominąć znaki nowego wiersza (co nota bene powinno być moim zdaniem domyślnym zachowaniem funkcji file):
  1. $plik = file("test.txt", FILE_IGNORE_NEW_LINES);
agrutko
klima06

Skopiowałem Twój kod. Po uruchomieniu nadal jest pusto. Po zamianie na potrójne znaki równości nic się nie poprawiło. Przekopiowałem skrypt na serwer, efekt jest taki sam - nic nie pokazuje.

SmokAnalog

Dodanie tego parametru do kodu klima06 spowodowało, że wyświetlił dwa razy PONOWNIE TO SAMO co znaczy, że nadal nie działa sad.gif

Spróbuję jeszcze usunąć kodowanie tych plików. Oba ustawiłem na UTF-8 i tu może być problem. Jeśli nie.... to nie wiem sad.gif

Edit:
Przekonwertowałem oba pliki do UTF-8 (bez BOM) i działa. W kodowaniu ANSI również. Nie rozumiem dlaczego ma problem z UTF-8...

Dzięki za chęć pomocy chłopaki
Wazniak96
Sprawdź jak wyglądają dane w tablicy, czyli:
  1. print_r($plik);
  2. //.....
  3. print_r($wiersz)_
i wszystko powinno być jasne wink.gif
freemp3
Cytat
Nie rozumiem dlaczego ma problem z UTF-8...

Ponieważ UTF-8 z BOM dodaje na początku pliku dodatkowy znacznik. To zapewne on powodował problemy.
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.