[PHP]mise en forme avec sprintf [Résolu/Fermé]

Signaler
Messages postés
2
Date d'inscription
dimanche 1 février 2009
Statut
Membre
Dernière intervention
1 février 2009
-
 toto -
Bonjour,

voila dans ma base de donnée, je récupère d'un coté le format du message ($format) à afficher et d'un autre un tableau ($arg = array()) contenant les arguments à insérer dans ce message.

Je souhaite donc à partir de ces données afficher mon message à l'aide de la fonction sprintf. J'ai essayé sprintf($format, $arg) et sprint($format, implode(',', $arg)) mais ni l'un ni l'autre ne fonctionnent, dans les deux cas j'obtiens le message d'erreur : Too few arguments :(

Avez vous une solution à ce problème, sachant que tous les messages n'ont pas le même nombre d'arguments ?

2 réponses

Bonjour

Ça n'est peut-être pas le plus simple :
  $cmd= 'return sprintf($format';
  for ($k=0; $k<count($arg); $k++) $cmd.=",\$arg[$k]";
  $cmd.=');';
  echo eval($cmd);
Messages postés
2
Date d'inscription
dimanche 1 février 2009
Statut
Membre
Dernière intervention
1 février 2009

en effet je n'ai pas pense à eval, merci toto.

Une autre solution qui viens de m'être fournie en utilisant call_user_func_array() et qui fonctionne aussi :
$param = array();
$param[0] = $format;
foreach($arg as $a) { $param[] = $a; }
$message = call_user_func_array('sprintf', $param);
C'est la fonction "faite pour". Nettement mieux que mon bricolage avec eval.