existuje call_user_func_array('funkce', $pole), každopádně ti index 'a', který máš v tom poli, nepůjde do argumentu $a ve funkci. Všechny ty indexy se ignorují a bere se jen jejich pořadí, php obecně nebere v potaz názvy argumentů, jen jejich pořadí.
<?php
$arr = array('je'=>'A', 'to'=>'B', 'jedno'=>'C');
call_user_func_array('zavolej', $arr);
function zavolej($a, $b, $c) {
...
}
Uvnitř funkce můžeš zavolat func_get_args(), které ti vrátí pole argumentů, takže argumenty vůbec nemusíš zadávat.
<?php
$arr = array('je'=>'A', 'to'=>'B', 'jedno'=>'C');
call_user_func_array('zavolej', $arr);
function zavolej() {
$argumenty = func_get_args(); // vrátí array(0 => 'A', 1 => 'B', 2 => 'C')
}
Každopádně není důvod si nepředat do funkce celé pole. Dokud to pole nějakým způsobem nezměníš, tak se nevytváří kopie. Pokud to pole uvnitř funkce měníš a chceš tu změnu zachovat i pro tu původní proměnnou, tak můžeš použít referenci.
<?php
$arr = array('a'=>'A', 'b'=>'B', 'c'=>'C');
zavolej($arr);
var_dump($arr); // vrátí array('a'=>'A', 'b'=>'B', 'c'=>'C', 'd' => 'D');
function zavolej(&$arr) {
$arr['d'] = 'D';
}