OVH Cloud OVH Cloud

fonction recursive avec passage par reference

1 réponse
Avatar
Stephanie Le Gall
Bonjour,


J'utilise une fonction récursive pour récupérer un tableau d'ID.

J'ai besoin de cettre structure de fonction car la structure de la base de
données est en "arbre" et qu'il n'y a pas de limite de niveau.


Voila le code :

____________________________________________________
function remplir_tableau($id, &$arrayOfAllElem)
{
$arrayOfAllElem[] = $id;
$req_ksup = mysql_query("select kinf_ksup,nume_kard,soci_kard
from kardex_superieur
left join kardex on id_kard=kinf_ksup
where ksup_ksup='$id' ");

while ($row = mysql_fetch_array($req_ksup, MYSQL_NUM))
{
remplir_tableau($row[0], &$arrayOfAllElem);
}
}


remplir_tableau($id_kard, $TabKard);
_____________________________________________________



Mais si je ne change pas le paramètre du php.ini suivant
allow_call_time_pass_reference à true j'ai un message :

Warning: Call-time pass-by-reference has been deprecated - argument passed
by value; If you would like to pass it by reference, modify the declaration
of [runtime function name](). If you would like to enable call-time
pass-by-reference, you can set allow_call_time_pass_reference to true in
your INI file. However, future versions may not support this any longer.

J'ai le message mais la fonction marche quand même !

Y a t'il un autre de moyen de procéder ? ... ou de ne pas afficher le
message ?


Merci de votre aide



Stéphanie

1 réponse

Avatar
ftc
Voila le code :

____________________________________________________
function remplir_tableau($id, &$arrayOfAllElem)


Donc tu indiques dans le prototype de ta fonction que $arrayOfAllElem
doit être passé en référence

remplir_tableau($row[0], &$arrayOfAllElem);


Donc ici, pas besoin de préciser que tu passes $arrayOfAllElem par
référence:

remplir_tableau($row[0], $arrayOfAllElem);