Foreach üres tömbre


Személy szerint már sokszor jártam úgy, hogy egy eredményt, ami várhatóan egy tömb volt be kellett járja. Ilyen esetekben általában meg szoktuk vizsgálni, hogy a tömbnek vannak-e elemei. Ez nem a legelegánsabb megoldás, hisz egy fölösleges if -et jelent, s ez nem mindig jelent megoldást.

Mindezt egy egyszerű kis típuskonverzióval meg ki tudjuk kerülni. Így a foreach nem fog null tömbre hivatkozni.

foreach ((array) $nem_array as $kulcs => $ertek) {
    print "Kulcs $kulcs, Ertek $ertek\n";
}

Ebben az esetben a php nem fog egy csúnya hibaüzenetet küldeni, ehelyett nem járja be a tömböt, hisz az egy üres tömb lesz.

Szerkesztve – BlackY: Ahogy azt Zogmund írja hibát (pontosabban E_WARNING, vagyis figyelmeztetés) akkor jelez az értelmező, ha az iterálandó érték nem array vagy egy, az Iterable interfészt implementáló osztály példánya (PHP 5). És az ilyen castolások valóban később nehezen megtalálható hibákat eredményezhetnek, ezért inkább a következőt javaslom:

assert('is_array($valtozo) || $valtozo instanceof Iterable'); /* Ez fejlesztés közben jön jól, ha $valtozo nem iterálható megszakítja a scriptet, és azonnal tudjuk, hogy mi volt a gond */
$valtozo = is_array($valtozo) ? $valtozo : array(); /* Ez pedig már az éles oldalon, ahol például felhasználótól érkező adaton akarunk végigiterálni (pl.: checkboxok - ha egyet sem jelöl be, akkor nemhogy nem tömböt, de még értéket sem kapunk) */

És ha az olvashatatlanságig el akarjuk csúnyítani a kódunkat:

foreach( (is_array($tomb) ? $tomb : array()) as $kulcs => $ertek)

Továbbá egy megjegyzés: ha valamiről biztosan tudjuk, hogy tömbnek kell lennie (vagy tömbnak VAGY nullnak), akkor használhatjuk (PHP 5.1-től) a Type hinting megfelelő részét:

function akarmi(array $tomb) {} /* $tomb biztosan array típusú, különben futási idejű hiba (E_ERROR) keletkezik */
function akarmi(array $tomb = null) {} /* $tomb vagy array típusú, vagy null érték, egyéb esetben E_ERROR keletkezik és megáll a script futása */
Kapcsolódó bejegyzések:
  • Foreach üres tömbre

    Bizonyára sokszor megesett már veletek is, hogy egy végtelen nagyságú tömböt objektummá szerettetek volna alakítani.  Ez a megoldás rendkívül hasznos,  s gyakran …

  • Foreach üres tömbre

    A PHP nyelvről szóló sorozatunknak ebben a részében a tömböket fogom bemutatni. A PHP tömb vagy eredeti nevén array egy úgynevezett összetett változó típus. Az ö …

  • Foreach üres tömbre

    Néha jól jöhet, ha tudjuk, hogy egy-egy függvényünket milyen környezetből (milyen függvényből, mely osztály mely metódusából, melyik fájlból stb.) hívták meg. Eb …

  • Foreach üres tömbre

    Ezen tutoriálom segítségével megtanulhatja mindenki a következő BBkódokat előállítani:Vastag szöveg Aláhúzott szöveg Dőlt szöveg Képek HTML kód kilövés …

  • Foreach üres tömbre

    A következőkben egy olyan, általam írt PHP-s függvényt szeretnék bemutatni, amellyel könnyedén és egyszerűen készíthetünk magunknak olyan oldalt, amely támogatja …

A cikket beküldte: Gombos Lorand (http://)

1 hozzászólás

  1. Zogmund (http://zogmund.blog.hu) says:

    Ha üres a tömb, akkor a foreach nem ad hibát, ellenben ha nem tömböt kapsz akkor van a probléma (bár gondolom erre gondoltál, mert a példakódból ez jön le, csak a szövegben nem ez van :)), ilyenkor ez tényleg kényelmes, jó megoldás.
    De amíg nem “éles a kód”, addig nem jó ezt használni, mert egy csomó bug -ot “elnyelhet”.

Szólj hozzá
a Foreach üres tömbre c. bejegyzéshez

- Engedélyezett HTML elemek: <a> <em> <strong> <ul> <ol> <li>
- Forráskód beküldéséhez tedd a kódot ezek közé: <pre lang="php" line="1">Kódrészlet helye itt</pre>