Často potřebujeme spojit více polí dohromady, to lze velmi elegantně provést funkcí `array_merge`:
$userIdsA = [1, 2, 3];$userIdsB = [5, 6, 7];// vrátí [1, 2, 3, 5, 6, 7]$finalIds = array_merge($userIdsA, $userIdsB);
Funkce array_merge
spojí dvě pole do jednoho velkého. Pokud nastane kolize v klíčích, vyhraje hodnota pravého pole.
Často však získáváme pole polí, které vzniká až v cyklu (například z databáze a pak procházíme přes foreach) a proto předem nevíme počet mergování.
Naivní řešení může vypadat třeba takto:
$finalIds = [];foreach ($users as $user) {$finalIds = array_merge($finalIds, $user->someIds);}
Toto řešení je však velmi neefektivní vůči CPU, protože musíme s každou iterací mergovat pole dohromady a celé velké pole opakovaně procházet.
Existuje však jednoduché řešení, kdy upravíme mergovací algoritmus, abychom data procházeli jen jednou:
$finalIds = [];foreach ($users as $user) {$finalIds[] = $user->someIds;}
V tomto případě v poli $finalIds
bude vznikat o trochu více dat, ale stále to je menší problém, než výhoda, která vznikne uspořením času.
Samotné mergování se liší podle verze PHP, kterou používáte a řeší se elegantním trikem:
/* PHP 5.6 a starší */$finalIds = call_user_func_array('array_merge', $finalIds + [[]]);/* PHP 5.6+ a novější */$finalIds = array_merge([], ...$finalIds);/* PHP 7.4+ a novější pro neprázdné pole */$finalIds = array_merge(...$finalIds);
Zejména řešení array_merge(...$finalIds)
vypadá velmi zajímavě, protože využívá nového konceptu PHP 7, kdy lze předat dynamický počet argumentů do funkce pomocí znaku trojtečky na začátku. Proces mergování je pak maximálně efektivní a celou logiku si vyřeší PHP uvnitř automaticky.
Zkrácený zápis array_merge(...$finalIds)
lze použít jen pro neprázdné pole. Pokud jde o prázdné pole, do funkce se nepředává žádný argument a funkce vyhazuje chybu Function array_merge invoked with 0 parameters, at least 1 required.
.
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Nabízím trénink vývojářů, konzultace, školení a analýzu návrhových vzorů. Osobně v Praze nebo online.
Napište mi, pokud si nevíte rady.
Lektor: Jan Barášek
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | cs