Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]array_search i klucz zerowy w tablicy
Forum PHP.pl > Forum > Przedszkole
lukasz_matysek
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.
wookieb
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.
lukasz_matysek
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ę.
croc
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.
lukasz_matysek
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.
wookieb
Nie wszystkie klucze w tablicach są numeryczne.
  1. $foundKey !== false

jest najbardziej optymalnym rozwiązaniem
lukasz_matysek
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.
nospor
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ć.
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.