Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] jak sprawdzic czy istnieje index w tablicy
Forum PHP.pl > Forum > Przedszkole
styx
Pozdrawiam
Mam pytanie jak w prosty sposób sprawdzić czy istnieje jakiś indeks w tablicy. Tak aby nie pojawiał się błąd:

Notice: Undefined offset: 5 in /mnt/www/plik.php on line 372
styx
isset pluje błąd taki jak napisałem powyżej, sprawdź sam jak nie wiezysz
nospor
smile.gif
To pokaz kod, bo moze nie umiejetnie uzywasz isset

Cytat
sprawdź sam jak nie wiezysz
No oczywiscie, juz pędze i bede sprawdzal dzialanie funkcji ktorej uzywam od 4 lat...
styx
troche dopisze
mam taki kawałek kodu:
  1. <?php
  2. for ($licznik=1;$licznik<=7;$licznik++) {
  3. $wiersz1 = $this->tablica[1][$licznik][1]['nazwa'];
  4. $wiersz2 = $this->tablica[1][$licznik][2]['nazwa'];
  5. ?>

i załózmy że dla $licznik=5 nie istnieje wymiar w tablicy jak to sprawdzić?
nospor
  1. <?php
  2. if (isset($this->tablica[1][$licznik])) ...
  3. ?>
hwao
  1. <?php
  2. isSet( $aTablica[$mKlucz] )
  3. ?>

  1. <?php
  2. array_key_exists( $mKlucz, $aTablica )
  3. ?>


  1. <?php
  2. $wiersz1 = isSet( $this->tablica[1][$licznik][1]['nazwa'] ) ? $this->tablica[1][$licznik][1]['nazwa'] : 'domyslna wartosc - brak klucza'
  3. ?>
styx
hwao: ok to jest dobre, tak stosowałem w innym miesjcu ale chciałem się spytać czy nie ma jednego polecenia

nospor: no ok ale wtedy musze zrobic wiecej takich ifów na kazdy poziom tablicy w kazdej iteracji, a nie ma jednego polecenia gdzie wrzuce całą tablica i da mi false albo true?
phpion
  1. <?php
  2. for ($licznik=1;$licznik<=7;$licznik++) {
  3. if (isset($this->tablica[1][$licznik])) {
  4. $wiersz1 = $this->tablica[1][$licznik][1]['nazwa'];
  5. $wiersz2 = $this->tablica[1][$licznik][2]['nazwa'];
  6. }
  7. }
  8. ?>

PS: po co ci 4-wymiarowa tablica? Potrafisz to sobie wogóle wyobrazić? bo ja nie bardzo...

Co chcesz osiągnąć? Bo domyślam się, że samo przypisanie dla $wiersz1, $wiersz2 jest również złym posunięciem.
mike
~phpion.com coraz więcej mizernych średniaków bierze się za frameworki.
Piszesz dosłownie w każdej sprawie związanej z Symfony i prawie zawsze kończy się na tym, że czegos nie doczytałeś, albo nie zrozumiałeś z dokumentacji.
Już nawet raporty na te Twoje problemy z Symfony się pojawiają. Żadnego większego problemu nie jesteś w stanie rozwiązać sam tylko lecisz na forum.
Co byś teraz chciał usłyszeć? "Wróć do PHP3" ?

Wyluzuj więc.

Napisałem to żeby Ci uzmysłowić, że tak jak Ty teraz jedziesz tak i Tobie można pojechać.
Nie podoba Ci się czytanie przedszkola to nie rób tego i nie odpisuj. Nie musisz. Świat przetrwa bez Twojej interwencji.

P.S.
I niech to bedzie koniec prywatnych wycieczek.
Reszta między sobą bądź do mnie na PW
phpion
/*
usunięto - poniosło mnie
poprzedni post również wyedytowałem
*/

PS: dobra, koniec, buziak :*
styx
phpion.com

Zauważ że isset nie sprawdza się do tablicy, no owszem można stosować ale na kazdy wymiar tablicy
  1. <?php
  2. if (isset($this->tablica[1])) {
  3.  if (isset($this->tablica[1][$licznik])) {
  4.  if (isset($this->tablica[1][$licznik][1])) {
  5. if (isset($this->tablica[1][$licznik]['nazwa'])) {
  6. ?>

cos takiego rzeczywiscie będzie cziałało,

to jest naprawde złożona struktura,
to jest tylko kawałek kodu i objęcie jej tablicą jest najlepszym sposobem,
chociaż zastanawiam się nad uzyciem klasy

ale jak już napisałem pytanie brzmi, jak sprawdzic czy taka struktura istnieje: $this->tablica[1][$licznik]['nazwa'])
jeżeli np. brakuje ktregoś wymiaru i żeby to było jedno polecenie,
no i tylko o to chodzi nie zagłebiaj się już czy moje rozwiązanie jest ok
phpion
Hmmm rozumiem, że do budowy tej struktury używasz 4 pętli. Nie możesz w każdej z nich sprawdzać isset'em istnienia odpowiedniego indeksu tablicy?Swoją drogą: możliwe, że przydatne Ci będzie również is_array" title="Zobacz w manualu PHP" target="_manual
Cytat(styx @ 23.08.2007, 12:39:42 ) *
pytanie brzmi, jak sprawdzic czy taka struktura istnieje: $this->tablica[1][$licznik]['nazwa'])
  1. <?php if(isset($this->tablica[1][$licznik]['nazwa'])) ?>
nospor
  1. <?php
  2. $ar[0][1][2]['nazwa'] = 2;
  3. if (!isset($ar[20][2][1]['ola'])) echo 'nie ma $ar[20][2][1][ola]<br />'; 
  4. if (!isset($ar[0][1][1]['nazwa'])) echo 'nie ma $ar[0][1][1][nazwa]<br />';
  5. ?>

Czy to ci wali bledem z isseta? no chyba nie. a sprawdzasz sobie wielopoziomowo. Nie wiem gdzie masz problem.
Mozesz tez uzyc empty(). Ono z zalozenia niczym nie pluje.
styx
nie chcę się kłucić bo pewnie coś źle robięale uważam że nie masz racji, masz pewnie mało restrykyjne ustawienia serwera i przez to Ci nie pluje błędów NOTICE, też mogę to wyłąćżyc i rzeczywiście wtedy to będzie działać ale przy ustawieniach:
  1. <?phperror_reporting (E_ALL|E_STRICT);ini_set('display_errors',true);?>
jest błąd uwież miempty zachowuje się tak samo,jedynym rozwiązaniem jest w takim razie array_key_exists() skoro nie istniej takie rozwiązanie, a może można jakoś te błedy przechwytywać try{}catch{}, ktoś wie?a propo użycie is_array ten sam problem
nospor
ja mam takie samie ustawienia jak ty. Mi isset nie pluje zadnym bledem przy przykladzie co ci podalem. Tobie pluje? Mozesz pokazac jakim?
styx
nospor: przeczytaj sobie cały temat jeszcze raz

kurcze jestem cierpliwy wyjasnie jescze raz

jest taka tablica $this->tablica
Array
(
[1] => Array
(
[4] => Array
(
[1] => Array
(
[nazwa] => Dupa
)

)

)

)

i teraz do takiej tablicy zrob
  1. <?php
  2. if (isset($this->tablica[2][$licznik][1]['nazwa'];))
  3. ?>


i jeżeli rzeczywiscie masz takie same ustawienia to zobaczysz
dla mnie jest to logiczne
nospor
Cytat
kurcze jestem cierpliwy wyjasnie jescze raz
kurcze, ja tez jestem cierpliwy. podalem ci przyklad i prosze cie bybs mi pokazal jakie masz bledy z tego przykladu. ciezko?
Jak ja mam twoje sprawdzic jak nie mam twojej klasy.... mysl troche. Przyklad mial odzwierciedlac Twoj problem. Pokaz mi wiec jego wynik a nie sie cierpliwujesz.

edit: a ten srednik to tak masz w pliku? nic dziwnego ze masz bledy...
styx
sorx zjebałem
sorx masz racje
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.