Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] in_array zawsze zwraca false
Forum PHP.pl > Forum > Przedszkole
TheaSiX
Wstyd pytać o to, ale nie wiem dlaczego tak się dzieje.. otóż powiedzmy, że mam jakiś ciąg znaków:
  1. $string = "jeden, dwa, trzy, cztery";

zmieniam ciąg na elementy tablicy używając explode()
  1. $s_array = explode(",",$string);

teraz pobieram z $_GET pewną zmienną, której wartość przyjmijmy wynosi "jeden". Chcę sprawdzić czy ta zmienna istnieje jako wartość w tablicy. Robię to za pomocą in_array()
  1. if(in_array($_GET["var"],$s_array) == true) {
  2. return true;
  3. }
  4. else {
  5. return false;
  6. }

Problem w tym, że zawsze dostaję false. Przyjrzałem się budowie tablicy przy tworzeniu jej za pomocą explode. Wygląda ona tak:
  1. $s_array = array([0]=>"jeden", [1]=>"dwa", [2]=>"trzy", [3]=>"cztery");

Najdziwniejszy jest fakt, że jeżeli na sztywno utworzę tablicę
  1. $s_array = array("jeden","dwa","trzy","cztery");

Sprawdzanie wykonuje się dobrze. Próbowałem znaleźć sposób na usunięcie kluczy, lub wyciągnięcie wszystkich wartości, ale array_values() zwraca tablicę w takiej samej postaci. Od zawsze używam in_array(), ale pierwszy raz mam takie problemy(exclamation.gif). Od razu zaznaczę, że wszystko musi zaczynać się od stringa, bo w takiej postaci przechowywane są dane w bazie. Jakieś inne pomysły jak mógłbym to sprawdzać?
skowron-line
Cytat(TheaSiX @ 6.12.2009, 19:24:32 ) *
Wstyd pytać o to


Wstyd jak nic.

Widać kolego masz słaby wzrok. Pozwól że pomogę to twój string w powiększeniu smile.gif
  1. [/size]$string = "jeden, dwa, trzy, cztery";
  2. [size="7"]



a jak to nie pomoże to
  1. echo str_replace( " ", "_", $string );


* coś ten bbcode szfankuje
Zyx
Takie coś:

  1. $string = "jeden, dwa, trzy, cztery";


rozdzielone takim czymś:

  1. $s_array = explode(",",$string);


nigdy nie da Ci tego:

  1. $s_array = array([0]=>"jeden", [1]=>"dwa", [2]=>"trzy", [3]=>"cztery");


I dołączając się do kolegi, który napisał odpowiedź równo ze mną... PRZYJRZYJ SIĘ.
maly_swd
a czy dodatkowo jeszcze w sprawdzeniu nie powinno byc:
zamiast
if(in_array($_GET["var"],$s_array) == true) {
to
if(in_array($_GET["var"],$s_array) === true) {
Wicepsik
Cytat(maly_swd @ 6.12.2009, 19:57:39 ) *
a czy dodatkowo jeszcze w sprawdzeniu nie powinno byc:
zamiast
if(in_array($_GET["var"],$s_array) == true) {
to
if(in_array($_GET["var"],$s_array) === true) {

Nie....... sciana.gif
maly_swd
"Nie....... " - a mozesz rozwinac;)
skowron-line
Cytat(Wicepsik @ 6.12.2009, 20:14:26 ) *
Nie....... sciana.gif



Cytat(maly_swd @ 6.12.2009, 23:20:28 ) *
"Nie....... " - a mozesz rozwinac;)


@Wicepsik to jest kwestia sporna i oczywiście uzależniona jest od programisty.
Zyx
Może być, w przypadku tej funkcji niekoniecznie powinno. Od strony praktycznej nie ma to żadnego znaczenia. === przydaje się jedynie wtedy, gdy funkcja lub wyrażenie mogą zwrócić dwa typy wartości, np. integer i boolean o odmiennych znaczeniach. Tak jest np. w przypadku array_search(). Wtedy potrójny znak równości pozwala porównać typy i sprawdzić, co dostaliśmy. Weźmy taką sytuację:

- Funkcja zwraca 0 jako indeks początku znalezionej pozycji.
- Funkcja zwraca false, jeśli nic nie znalazła.

Jeśli zrobimy 0 == false, to wszystko będzie rzutowane, a my będziemy myśleć, że nic nie znaleźliśmy nawet, jeśli szukana rzecz istnieje na samym początku (0 po zrzutowaniu na boolean daje false, false po zrzutowaniu na integer daje 0). Dopiero gdy użyjemy potrójnego znaku równości, możemy rozróżnić te dwie sytuacje, gdyż dodatkowo porównane zostaną typy i żadnego rzutowania nie będzie. Jednak in_array() zwraca wyłącznie wartości boolean, dlatego potrójne porównanie nie ma tam żadnego zastosowania.
maly_swd
Zyx-> no wlasnie... wiec ja sobie spokojnie zawsze uzywam ===winksmiley.jpg
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.