Ahoj,
když mám takový pole
$arr = ('a'=>'A', 'b'=>'B','c'=>'C'); //Jen nástřel, jedna se o velký pole
a potřebuji zavolat funkci a předat 4 parametry
zavolej_funkci('A','B','C');
Existuje několik řešení tohoto problému.
Pokud máš argumenty v poli, a chceš je jen předat jako argumenty funkci:
call_user_func_array('zavolej_funkci', $arr);
To předpokládá správné pořadí v tom poli.
Nebo můžeš použít funkci
extract, kterou ty argumenty z pole
$arr rozpustíš do stejně pojmenovaných proměnných. A pak zavoláš přesně to:
zavolej_funkci($a, $b, $c, $d);
Je to funkční, ale vůči lokálnímu kontextu dost drsné. Takže to dělej alespoň v nějaké funkci, ať si něco nepřepíšeš. Na druhou stranu to rovnou můžeš tu funkci volat:
zavolej_funkci($arr['a'], $arr['b'], $arr['c'], $arr['d']);
Bude to čistější, bezpečnější a přehlednější.
Nebo taky můžeš chtít, že to pole je prostě pole, obsahuje hodně parametrů, a tak to do té funkce předej celé jako jeden argument:
zavolej_funkci($arr);
To už ale trochu smrdí, a pouvažoval bych, zda to pole musí být opravdu tak velké. Opravdu ta funkce zpracovává všechny argumenty? (Třeba jo, neříkám nic.)
Vzhledem k tomu, jak to popisuješ bych zvolil:
zavolej_funkci($arr['a'], $arr['b'], $arr['c'], $arr['d']);
Nikdy nepředávej celé pole, pokud je to jen trochu možné.