Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] in_array zawsze zwraca false
TheaSiX
post 6.12.2009, 19:24:32
Post #1





Grupa: Zarejestrowani
Postów: 110
Pomógł: 10
Dołączył: 3.09.2006
Skąd: Bishop Auckland

Ostrzeżenie: (0%)
-----


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ć?
Go to the top of the page
+Quote Post
skowron-line
post 6.12.2009, 19:35:30
Post #2





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


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


Ten post edytował skowron-line 6.12.2009, 19:38:22


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
Zyx
post 6.12.2009, 19:38:10
Post #3





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----


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Ę.

Ten post edytował Zyx 6.12.2009, 19:39:01


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
maly_swd
post 6.12.2009, 19:57:39
Post #4





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

Ostrzeżenie: (0%)
-----


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) {


--------------------
śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu..
Go to the top of the page
+Quote Post
Wicepsik
post 6.12.2009, 20:14:26
Post #5





Grupa: Zarejestrowani
Postów: 1 575
Pomógł: 299
Dołączył: 26.03.2009

Ostrzeżenie: (20%)
X----


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


--------------------
Go to the top of the page
+Quote Post
maly_swd
post 6.12.2009, 23:20:28
Post #6





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

Ostrzeżenie: (0%)
-----


"Nie....... " - a mozesz rozwinac;)


--------------------
śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu..
Go to the top of the page
+Quote Post
skowron-line
post 7.12.2009, 07:56:58
Post #7





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


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.


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
Zyx
post 7.12.2009, 08:32:32
Post #8





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----


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.


--------------------
Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0
Go to the top of the page
+Quote Post
maly_swd
post 7.12.2009, 08:57:33
Post #9





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

Ostrzeżenie: (0%)
-----


Zyx-> no wlasnie... wiec ja sobie spokojnie zawsze uzywam ===winksmiley.jpg


--------------------
śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu..
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 6.07.2025 - 23:47