ArrayHelper osztály

Innen: Szitár-Net Wiki
Ugrás a navigációhoz Ugrás a kereséshez

Az ArrayHelper osztály a Yii Helpers beépített osztályai közé tartozik. Az ArrayHelper osztály a tömbökkel való gyakori műveletek végrehajtását segíti megvalósítani.

Tömbkezelő ArrayHelper metódusok

getValue() metódus

Vizsgálja, hogy egy tömb vagy objektum bizonyos kulcsa létezik-e, ha igen akkor a meghatározott kulcs értékét adja vissza, ha nem létezik akkor pedig egy előre meghatározott értéket ad vissza.

ArrayHelper::getValue($tomb, ’kulcs’, ’Nem található a kulcs’);

A első paraméter a tömb. A második paraméter a kulcs:

  • A tömb kulcsa vagy az objektum attribútuma
  • Ha több dimenziós a tömbünk akkor pontokkal szeparált kulcsok vagy attribútumok megadásával is megkaphatjuk a kívánt értéket pl., ha [’tömb1’][’tömb2’][’értékKulcsa’] akkor ’tömb1.tömb2.értékKulcsa’
  • Callback függvény visszatérése által tudjuk manipulálni a kívánt adatokat

A metódus harmadik paramétere opcionális, ha nem található meg a megadott kulcs a tömbben, akkor ez a harmadik paraméter lesz a metódus visszatérési értéke, alapértelmezetten ez null.

setValue() metódus

Példa kulcs szerinti elérésre

Vizsgálja, hogy egy tömb, illetve a megadott kulcs létezik-e, ha létezik akkor annak az értékét felülírja, ha nem létezik akkor pedig létrehozza akár még a tömböt is és a megfelelő kulcsokat és az értéket.

ArrayHelper::setValue($tomb, ’kulcs.ertek3’, ’Ertek’);

Az első paraméter a tömb, a második a kulcs, pontokkal szeparált kulcsok megadásával is megadhatjuk pl., ha [’tömb1’][’tömb2’][’értékKulcsa’] akkor ’tömb1.tömb2.értékKulcsa’. A harmadik paraméter lesz az értéke a megadott kulcsnak.

remove() metódus

Eltávolítja a tömb megadott kulcsát és annak értékét. Visszatérési értékébe az eltávolított elem értéke kerül, ha nem létezik akkor pedig a harmadik paraméterben opcionálisan meghatározott érték fog visszatérni, alapértelmezetten ez a null.

ArrayHelper::remove($tomb, ’kulcs’, ’Nem található a kulcs’);

Fontos megemlíteni, hogy itt nem használható a pont szeparátorral megadott kulcsok meghatározása. Csak az egyszerű string formátumú kulcs engedélyezett. Ez sajnos behatárolja a metódus hatékonyságát / felhasználhatóságát.

filter() metódus

Képes érték alapján szűrni, majd visszatérésként, csak az adott szűrési feltételnek megfelelő elemek lesznek benne(tömb esetében a benne lévő összes érték megmarad).

ArrayHelper::filter($tomb, ['A', '!B.2']);

index() metódus

Több dimenziós tömb elemeit képes kulcs alapján indexelni, és megadott attribútum szerint csoportba rendezni. Visszatérési értéke az indexelt tömb lesz.

ArrayHelper::index($tomb, ’id’, ’name’);

Első paraméter a tömb, második az egyedi kulcs, mely alapján az egyedi indexelés fog megvalósulni, például id alapján. Harmadik paraméternek azt az attribútumot / attribútumokat várja mely alapján csoportokat fog tudni létrehozni (használhatunk callback függvényt is). Ha a fenti kód alapján id indexelés és name csoportosítás történik egy tömbön akkor:

’Fred’ => [
	1 => [’id’ => 1, ’name’ => ’Fred’, ’type’ => 220]
],
’Fredddy’ => [
	3 => [’id’ => 3, ’name’ => ’Fredddy’ , ’type’ => 30],
	4 => [’id’ => 4, ’name’ => ’Fredddy’ , ’type’ => 220],
        5 => [’id’ => 5, ’name’ => ’Fredddy’ , ’type’ => 30]
]

Továbbá lehetőségünk van a harmadik paraméterben tömbként átadott értékkel többszörös csoportosításra is, a sorrend a tömbösítés sorrendjét is meghatározza. Ha a harmadik paraméter [’type’, ’name’] akkor:
ArrayHelper::index($tomb, ’id’, [’type’, ’name’]);

220 => [
    ’Fred’ => [
	  1 => [’id’ => 1, ’name’ => ’Fred’, ’type’ => 220]
    ],
    ’Fredddy’ => [
	  4 => [’id’ => 4, ’name’ => ’Fredddy’ , ’type’ => 220]
    ]
],
30 => [
    ’Fredddy’ => [
          3 => [’id’ => 3, ’name’ => ’Fredddy’ , ’type’ => 30],
          5 => [’id’ => 5, ’name’ => ’Fredddy’ , ’type’ => 30]
    ],
]

A második paraméterben null-t átadva, csoportosításra van lehetőségünk, az indexelés ebben az esetben automatikus.
ArrayHelper::index($tomb, null, ’name’);

’Fred’ => [
     0 => [’id’ => 1, ’name’ => ’Fred’, ’type’ => 220]
],
’Fredddy’ => [
     0 => [’id’ => 3, ’name’ => ’Fredddy’ , ’type’ => 30],
     1 => [’id’ => 4, ’name’ => ’Fredddy’ , ’type’ => 220],
     2 => [’id’ => 5, ’name’ => ’Fredddy’ , ’type’ => 30]
]

map() metódus

A metódus segítségével $kulcs => $érték párokat hozhatunk létre. Lehetőség van továbbá a csoportosításra is. A visszatérési érték az említett párokat tartalmazó asszociatív tömb.

ArrayHelper::map($tomb, ’id’, ’name’, ’type’);

Első paraméter a tömb, másodiknak megkell adnunk azt az attribútumot melyből szeretnénk, hogy a $kulcs legyen ($from), harmadiknak pedig azt az attribútumot melyből szeretnénk, hogy $érték legyen ($to). A negyedik paraméter opcionális, itt adhatjuk meg, hogy végezzen-e csoportosítást és ha igen akkor pedig melyik attribútum alapján. Callback függvények használhatóak. A fent leírt kód alapján a metódus visszatérési értéke így nézne ki:

220 => [
    1 => ’Fred’,
    4 => ’Fredddy’
],
30 => [
    3 => ’Fredddy’,
    5 => ’Fredddy’
]

multisort() metódus

A többdimenziós tömbök sorba rendezésére szolgál. Történhet egy vagy több kulcs alapján is. A rendezés iránya (csökkenő / növekvő sorrend) is megadható. Void metódus nincs visszatérési értéke, a megadott tömbön végzi el a sorba rendezést.

ArrayHelper::multisort($tomb, [’type’, ’id’], [SORT_ASC, SORT_DESC]);

Első paraméter a tömb, ha asszociatív akkor a sorrendezett tömb megtartja a kulcsokat. Második paraméterben kell megadnunk mely attribútumok alapján rendezzen sorba, callback függvény használata lehetséges. Több szempontot is megadhatunk tömb formájában, a sorrend meghatározó. Harmadik paraméterként opcionálisan megadhatjuk a sorba rendezés irányát, alapértelmezetten ez ’SORT_ASC’. Ha az attribútumokat különböző módon szeretnénk sorba rendezni akkor tömböt átadva tehetjük ezt meg. Tehát a fenti példa alapján a ’type’ növekvő sorrendben, az ’id’ csökkenő sorrendben kerül rendezésre. Lehetséges továbbá egy negyedik paraméter is, ez a ’sortFlag’, beállíthatjuk, hogyan kezelje a sorba rendezés értékeit, szövegként vagy számként stb. alapértelmezetten ’SORT_REGULAR’. A sorba rendezett tömb, ’type’ alapján növekvő, majd ’id’ alapján csökkenő sorrendben:

0 => 
	’id’ => 2,
	’name’ => ’Fredddy’,
	’type’ => 30
]
1 => [
	’id’ => 4,
	’name’ => ’Fredddy’,
	’type’ => 220
]
2 => [
	’id’ => 3,
	’name’ => ’Fredddy’,
	’type’ => 220
]
3 => [
	’id’ => 1,
	’name’ => ’fred’,
	’type’ => 220
]

merge() metódus

Két tömb összefésülését képes elvégezni. Az összefésülés logikája nyomán hatékonyan tudjuk alkalmazni különböző helyzetekben. A visszatérési érték az összefésült tömb lesz.

ArrayHelper::merge($tomb1, $tomb2);
A következő logika alapján épül fel az összefésülés:

  • A paraméterben megadott tömbök sorrendje meghatározó, azonosság esetén a második paraméter értéke fog érvényesülni.

Nem asszociációs tömb elemek esetén összefésülés történik (mind a 2 érték megmarad).

  • A következőképpen ’kulcs’ => new \yii\helpers\ReplaceArrayValue([1, 2]) felülírhatjuk a másik tömb kulcsa által meghatározott tömb értékét (csak a második paraméter tömbjében megadva érvényesülhet)
  • 'dev' => new \yii\helpers\UnsetArrayValue() segítségével pedig megadhatjuk melyik kulcs értéke kerüljön felszámolásra (szintén csak a második paraméter tömbjében megadva érvényesülhet)
Példa merge() metódusra

toArray() metódus

Az objektumok tömbbé való átalakítását valósítja meg. Így például az activerecord modellek az átalakítást követően, egyszerűen használhatóak REST API végpontok kiépítéséhez. A visszatérési érték a tömbbé alakított objektum lesz.

ArrayHelper::toArray($model, [
            'app\modules\bufeShop\models\Product' => [
                'name',
                'price' => function($element){
		return $element->price . ’ Ft’;	
            ]
]);

Első paraméterként az objektumot vagy az objektumokat tartalmazó tömböt várja. Második paraméterben opcionálisan megadhatjuk mit és milyen formában szeretnénk tömbként visszakapni. Mint ahogy azt a fentebbi példa is mutatja, megkell adnunk a modell osztályának az elérési útját, majd ezekután lehetőségünk lesz meghivatkozni a modell attribútumait (akár az általunk írt „get”-es attribútumokat is). Callback függvény használatára is van lehetőség.

Boolean típusú metódusok

keyExists() metódus

Vizsgálja, hogy a meghatározott kulcs létezik-e a megadott tömbben. Visszatérési értéke pedig egy boolean lesz (true – létezik, false – nem létezik).

ArrayHelper::keyExists(’kulcs’, $tomb, false);

Első paraméter a kulcs, második a tömb. A harmadik paraméter opcionális és ezzel a caseSensitive vizsgálatot lehet felfüggeszteni, alapértelmezetten caseSensitive = true, tehát a kis és nagybetűknek is egyeznie kell.

isIndexed() metódus

Vizsgálja, hogy a megadott tömb számokkal van-e indexelve, azt is lehetőségünk van vizsgálni, hogy a számok egymást követőek-e, folytatólagosak. Boolean értéket ad vissza.

ArrayHelper::isIndexed($tomb, true);

Az első paraméter a tömb, a második pedig opcionális és itt megadható, hogy vizsgálja-e a folytatólagosságot, ha true akkor az indexelésnek 0-tól kell kezdődnie és nem lehet kimaradás a számok között. A második paraméter alapértelmezett értéke a false.

isAssociative() metódus

Vizsgálja, hogy a megadott tömb asszociatív-e. Azt is lehetőségünk van vizsgálni, hogy a megadott asszociációs kulcsok mind string formátumúak-e. Boolean értéket ad vissza.

ArrayHelper::isAssociative($tomb, true);

Az első paraméter a tömböt, a második pedig opcionális és itt megadható, hogy kell-e vizsgálni az asszociációs kulcs formátumát, ha true akkor csak szöveg formátumok esetén ad igaz értéket (a ’122’ nem számít szöveg formátumnak a ’12w2’ már igen). A második paraméter alapértelmezett értéke a true.

isIn() metódus

Vizsgálja, hogy egy adott érték benne van-e a tömbben. Visszatérési értéke egy boolean.

ArrayHelper::isIn(’3’, $tomb);

Első paraméter a vizsgálni kívánt értéket várja, a második pedig a tömböt. Van egy harmadik paraméter mely opcionális, ha „true” értéket adunk neki akkor a típus szerinti egyenlőséget is vizsgálja, alapértelmezetten „false” az érték.

isSubset() metódus

Példa isSubset() metódusra

Vizsgálja, hogy a megadott elemek megtalálhatóak-e a vizsgálandó tömbben. Visszatérési értéke egy boolean.

ArrayHelper::isSubset([a,c],[a,b,c]);

Az első paraméterben azokat az elemeket kell tömb formájában megadni melyeket szeretnénk, hogy a metódus megkeressen a vizsgálandó tömbben. Fontos, hogy minden elemnek benne kell lennie a vizsgálandó tömbben, csak így ad vissza „true” értéket. A második paraméterben a vizsgálandó tömböt kell megadnunk. A harmadik paraméter opcionális és a típus szerinti összehasonlítást teszi lehetővé, ugyanúgy, mint az előbbi metódus esetében.