Hadd mutassak be néhány trükköt a PHP egy régi, de annál hasznosabb nyelvi elemével, aminek a neve: list(). Valószínűleg sokan vannak, akik még hallomásból sem ismerik ezt a szerkezetet, így az ő kedvükért kezdjük a legelején.

A mindig az értékadások bal oldalán álló list() konstrukcióval tömböket bonthatunk szét, és a tömbelemek értékeit külön-külön változókban helyezhetjük el. Nézzünk egy egyszerű példát:

/* Inicializáljuk a tömböt */
$arr = array('A', 'B', 'C', 'D');
 
/* a list() segítségével értéket adunk néhány változónak */
list($egy, $ketto, $harom, $negy) = $arr;
 
/* A változók tartalma a list() után:
 *  $egy == 'A'
 *  $ketto == 'B'
 *  $harom == 'C'
 *  $negy == 'D'
 */

Ez magában sem egy haszontalan dolog, de nézzük meg, hogyan csavarhatunk egyet-kettőt a dolgon!

Először: ha csak néhány tömbelemet kívánunk változókhoz rendelni, akkor hasznunkra válhat a list() azon tulajdonsága, hogy a felsorolásában kihagyhatunk elemeket az alábbi módon:

$arr = array('A', 'B', 'C', 'D');
/* a trükk */
list($egy, $ketto, , $negy) = $arr;
/* vagy akár: */
list (, , , $negy) = $arr;

Másodszor: A list()-tel használható a [] tömb-operátor, aminek a segítségével új elemeket adhatunk a tömbökhöz. Lássuk, hogyan:

/* Az eredeti tömb */
$arr = array(
    array('A', 'B', 'C', 'D'),
    array('E', 'F', 'G', 'H'),
    array('I', 'J', 'K', 'L'),
    array('M', 'N', 'O', 'P'),
    array('Q', 'R', 'S', 'T')
);
 
/* Négy üres tömböt hozunk létre */
$egy = $ketto = $harom = $negy = array();
 
/* Végiglépkedünk $arr-on és list()-tel kitöltjük az új tömböket */
foreach($arr as $row)
{
    list($egy[], $ketto[], $harom[], $negy[]) = $row;
}
 
/* A tömbök elemei a list() után:
 * $egy => 'A', 'E', 'I', 'M', 'Q'
 * $ketto => 'B', 'F', 'J', 'N', 'R'
 * $harom => 'C', 'G', 'K', 'O', 'S'
 * $negy => 'D', 'H', 'L', 'P', 'T'
 */

Remélem hasznotokra tudtam lenni ezzel a bejegyzéssel - további jó programozást és kockulást mindenkinek!


További információ a list()-ről a PHP Kézikönyvben található.

++++-

Hozzászólások Hozzászólások RSS

  1. Esetleg még amit meg lehetne említeni:

    list($a, $b) = array($b, $a);

    Azaz két változó tartalmának felcserélése list() segítségével... :)

  2. A while(list ($k, $v) = each($array)) szerkezet mennyivel lassúb mint a foreach?

  3. Nálam a következő eredmények jöttek ki, Win-en futtatott PHP 5.1.3-ban, 5 futási időt átlagolva, egy 1 000 000 elemű, int-eket tartalmazó tömbön végigmenve:

    - 4.001 másodperccel az utolsó helyre szorult a while (list($key, $value) = each($array)) {} szerkezet
    - 3.655 másodperccel az utolsó előtti a while (list(, $value) = each($array)) {}
    - A dobogó harmadik helyét 0.866 másodperccel a foreach ($array as $key => $value) {} foglalja el
    - A második, 0.765 másodperccel a foreach ($array as &$value) {}
    - És érdekes módon az első (0.747-tel) a foreach ($array as $value) {}

    Én mondjuk arra számítottam volna, hogy a referenciát adó második lesz az első, és lehet, hogy nagyobb adatszerkezeteknél át is venné a vezetést... :)

  4. helló.

    Lenne egy project, amihez php programozókat keresek. Ha lenne egy kis szabadidőd, vagy kedved, akkor dobj egy mélt, és megbeszélünk mindent. mélcímem tudod, mert beírtam. Köszi
    üdv, zlh

  5. Kedves zlh!

    Nem tudom kriz és közülem melyikőnkhöz szóltál. Ha hozzám, akkor én köszönettel visszautasítom a lehetőséget, mivel egy újabb munka nem nagyon fér bele az időmbe.

    üdv, #suidroot

  6. Érdekes eredmények, köszi a linket :)

Szólj hozzá!

regisztráció, bejelentkezés

Az oldalon nem jelenik meg.

Ezeket a tageket használhatod: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>