Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]array_search i klucz zerowy w tablicy
lukasz_matysek
post 3.11.2011, 12:03:13
Post #1





Grupa: Zarejestrowani
Postów: 33
Pomógł: 2
Dołączył: 25.03.2010

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


Męczę się z tym już od paru godzin, aż mnie głowa rozbolała.

Mam arraya:

  1. (
  2. [0] => 15
  3. [1] => 13
  4. [2] => 17
  5. [3] => 19
  6. )


Zawartość arraya chcę przeszukiwać pod kątem występowania odpowiednich wartości, a kiedy je znajdę - chcę je usuwać (unset). Wszystko jest fajnie do momentu, kiedy chcę wyszukać wartość która jest pierwsza na liście, czyli ma indeks 0 - zero. Niestety, mój problem leży w tym że już kompletnie mi się namieszało z typami i operatorami, tak iż zupełnie nie wiem jak testować wynik działania array_search. Dotąd robiłem to tak:

  1. $key = array_search($element_szukany,$tablica);
  2. if(false==$key)
  3. {
  4. ... tuutaj czynności do zrobienia w razie braku wartości w tablicy
  5. }
  6. else
  7. {
  8. ... tutaj robię pewne rzeczy jak znajdę wartość
  9. }


I niestety zachowuje się to tak, jakby pomijał pierwszą wartość. Wiem że nie pomija i że błąd jest mój.

Prawdopodobnie problem leży w mieszaniu przeze mnie znaczenia ZERO i FALSE, proszę o podpowiedź gdzie robię konkretnie błąd i dlaczego.

Ten post edytował lukasz_matysek 3.11.2011, 12:04:38
Go to the top of the page
+Quote Post
wookieb
post 3.11.2011, 12:19:15
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Rozumiem, że manual to narzędzie zbyt trudne do ogarnięcia?
http://pl2.php.net/array_search

Cytat
This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE, such as 0 or "". Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.


--------------------
Go to the top of the page
+Quote Post
lukasz_matysek
post 3.11.2011, 12:46:55
Post #3





Grupa: Zarejestrowani
Postów: 33
Pomógł: 2
Dołączył: 25.03.2010

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


Nie drogi moderatorze, manual to narzędzie do którego zajrzałem w pierwszym rzędzie.
Niestety, przeglądając posty początkujących na przedszkolu, doszedłem do wniosku że mogę spodziewać się takiej właśnie odpowiedzi.
Mimo wszystko dziękuję.
Go to the top of the page
+Quote Post
croc
post 3.11.2011, 13:00:15
Post #4





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

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


Cytat(lukasz_matysek @ 3.11.2011, 12:46:55 ) *
Nie drogi moderatorze, manual to narzędzie do którego zajrzałem w pierwszym rzędzie.

Musisz uważnie czytać manual, bo czasem - jak widać - w jednym zdaniu można znaleźć odpowiedzi. Zwracaj uwagę zwłaszcza na blok o zwracanych wartościach i przykłady.
Go to the top of the page
+Quote Post
lukasz_matysek
post 4.11.2011, 08:47:16
Post #5





Grupa: Zarejestrowani
Postów: 33
Pomógł: 2
Dołączył: 25.03.2010

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


Pozostawiam rozwiązanie dla innych osób, które by go poszukiwały

Otóż w tej konkretnej sytuacji najwygodniej, moim zdaniem, najpierw sprawdzić czy wartość zwracana przez array_search w ogóle jest numeryczna - za pomocą is_numeric:

  1. $key = array_search(...)
  2. if(is_numeric($key))
  3. {
  4. //oznacza że znaleziono element w arrayu, jest on pod indeksem $key
  5. }
  6. else
  7. {
  8. //jeśli zwrócona wartość nie jest wartością numeryczną, to zwrócono FALSE, więc wykonujemy tu czynności przewidziane na wypadek nie znalezienia elementu w arrayu
  9. }


Powyższy sposób całkowicie rozwiązał przedstawiony problem. Jeżeli nie ma w nim błędów merytorycznych - proponuję zamknąć temat.
Go to the top of the page
+Quote Post
wookieb
post 4.11.2011, 08:48:15
Post #6





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Nie wszystkie klucze w tablicach są numeryczne.
  1. $foundKey !== false

jest najbardziej optymalnym rozwiązaniem


--------------------
Go to the top of the page
+Quote Post
lukasz_matysek
post 4.11.2011, 08:51:13
Post #7





Grupa: Zarejestrowani
Postów: 33
Pomógł: 2
Dołączył: 25.03.2010

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


oczywiście zgadzam się z powyższym, przetestuję również podane przez Ciebie rozwiązanie. Zgodnie z tym co napisałem wyżej, podany przykład zadziałał w moim konkretnym przypadku, gdzie używałem wyłącznie kluczy numerycznych, co zresztą widać we wstawionym na początku arrayu. Dziękuję jednak za dopełnienie tematu i wskazanie drogi.
Go to the top of the page
+Quote Post
nospor
post 4.11.2011, 09:00:28
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Dziękuję jednak za dopełnienie tematu
"Drogi moderator" (jak to ująłeś) już na samym początku w pierwszym poście dopełnił temat podając ci linka i cytując:
Cytat
This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE, such as 0 or "". Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.
A ty zamiast to przeczytać i się nad tym zastanowić dłużej niż 5 sekund, wylałeś swoje żale jak to niedobrzy ludzie Cię do manuala odsyłają i że tylko tego mogłeś się spodziewać. Zamiast następnym razem tak marudzić to weź jednak skorzystaj z manuala i z rad jakie ci dają bardziej doświadczeni bo naprawdę nie robią tego by się nad Tobą biednym pastwić.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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: 31.07.2025 - 09:53