Kiemelt kép

Laravel Collections #2: Műveletek számokkal és iterációk

Előző posztomban megnéztük mi az a Collection a Laravel keretrendszerben és összeszedtük a statikus függvényeket, illetve azt, hogyan lehet tömbből Collectiont és Collectionből tömböt létrehozni. Most a matematikai számításokat és az iterációkat fogjuk megnézni. Illetve pár debug megoldást. 

Műveletek számokkal 

Gyakran előfordul az a feladat, hogy van egy tömbünk tele számokkal és azokat gyorsan (és minimális kóddal) össze kellene adni, átlagot számolni vagy egyéb matematikai számítást elvégezni rajtuk. Ebben is nagy segítség lehet a Collection. A leggyakrabban használt függvények a sum, min, max, avg és a count.  

Ha összetettebb számolásokat szeretnénk, akkor arra is megvannak a lehetőségek. Az értékek módosításához a transform vagy a map függvényt lehet használni (attól függően, hogy helyben vagy új tömbként kérjük a módosítást), ha egyetlen számot akarunk végeredményként, akkor arra a reduce való. Nézzünk erre is pár példát! 

 
Az első példában egy egyszerű faktoriális számítást csináltunk. A null coalescing operátorra (??) azért van szükség, mert az első iteráció során még a $carry változónk null (és azt 0-ra kasztolja a művelet) és 0-szor valami, az mindig nulla lesz. A második példában helyben szorzunk mindent kettővel. Ugyanezt csináljuk a map esetében is, de már a módosított értékekkel. Ha újra meghívnánk a map-ot, akkor is ugyanazt kapnánk vissza a $nums2x collectionben, az eredeti tömbünk értéke nem változott. 

Iterációk 

Az iterációk, vagyis a ciklusok az előbb már láthatóak voltak, a transform és a reduce is végigmegy az elemeken. De ha mi csak például ki akarjuk íratni az elemeket egymás alá, akkor is van lehetőségünk. Meg persze sok más műveletre is, nem csak számolásokat végezni a tömbökkel.  

Használhatjuk a már ismert foreach ciklust, hiszen a Collection implementálja az IteratorAggregate (illetve emiatt a Traversable) interfészeket. De van több beépített függvény is erre. Ilyen például az each is, amelynek egy closure-t kell átadnunk. 

 
Az each-ből a példában látható módon (return false) léphetünk ki. A függvényünk paraméterként az aktuális elemet, illetve az elem kulcsát kapja meg. Az eachSpread ezzel ellentétben multidimenzionális tömbökhöz tökéletes: a belső tömbök elemeit kapjuk meg paraméterként. 

Debug és tap 

Így a poszt végén nézzük még meg, hogy mit tehetünk, ha meg akarjuk nézni egy collection tartalmát vagy két művelet között látni szeretnénk mi történt. Természetesen használhatjuk a PHP beépített var_dump és egyéb függvényeit, de a Laravel biztosít egy szebb megoldást. A dd() és a dump() metódus (vagy a globális helperek, amelyik szimpatikusabb) szépen formázva jeleníti meg a tartalmat.  

A tap segítségével pedig a láncolt metódusaink közé tudunk például logolást berakni. Sokat tudnak ezek segíteni. 

Összegzés 

A fenti példákból jól látszik, hogy a Laravel Collection osztálya hasznos alkalmas számítási műveletekre, sokkal kényelmesebb. Arról nem is beszélve, hogy láncolhatók a metódusok. Ha pedig már a collection mellett döntöttünk egyszerű tömbök helyett, akkor szükségünk van iterációkra is! 

A következő posztban az elemek kezeléséről lesz szó. Új elem hozzáadása, eltávolítása, keresés, rendezés stb. Érdemes követni a blogot a közösségi oldalainkon, ha nem akarsz lemaradni. Ha szerinted másoknak is hasznos lehet ez a bejegyzés, akkor bátran oszd meg velük is! :) 

Laravel logo © Taylor Otwell, Laravel


Ha nem szeretnél lemaradni a hasonló posztokról, kövesd a blog Facebook oldalát!