44 sor csoda: Set::extract

Van egy nagyszerű eszköz a cake-ben, amelyet a core-ban nagy szeretettel használnak: Set. Korábbi í­rásomban már utaltam rá, de egyszerűen annyira jól ki lett találva, hogy nem lehet szó nélkül elmenni mellette.

Most egy kicsit rajtam a sirámok sora, Felix már elmondta a magáét. Az ő problémája az volt, hogy hónapok óta nem vette észre a Set-et, az enyém meg az, hogy hónapokig nem olvastam el a postját, mikor újra felfedezte🙂 .

Egyszerűen: a cake-ben megszokott egymásba ágyazott tömböket tudjuk vele roppant egyszerűen kezelni. Nézzünk egy-két példát:
Van egy User modelünk, amelyből szeretnénk egy tömböt, amelyben a kulcsok a User.id-k, az értékek pedig a user adatai. Mi sem egyszerűbb:

$users = $this->User->findAll();
$user_ids = Set::extract($users, "{n}.User.id");

Ezzel megvannak az azonosí­tók. Már csak az adatokra van szükség:

$users_data = Set::extract($users, "{n}.User");

És már csak össze kell rakni:

$userList = array_combine($user_ids, $users_data);

Voila. Ennyire egyszerű. Első paraméternek meg kell adni a tömböt, amin a műveletet végrehajtjuk. Második paraméter pedig egy útvonal (generateList() mintájára), amellyel leí­rjuk a keresett elemeket.

Végezetül lássunk egy generateList() alternatí­vát egyben (nem mintha az előző példa nem az lett volna🙂 ):

$userList = $this->User->generateList(null, null, null, "{n}.User.id", "{n}.User.username");

helyett:

$users = $this->User->findAll();
$userList = array_combine(Set::extract($users, "{n}.User.id"), Set::extract($users, "{n}.User.username"));

Ennek í­gy persze nem sok értelme van, viszont fejlesztés közben nagyon hasznos tud lenni. Mindenkinek csak ajánlani tudom: próbálgasd, használd.

Kategória: cakephp, php
Címke: ,
Közvetlen link a könyvjelzőhöz.

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s