[PHP]mise en forme avec sprintf

Résolu/Fermé
Dauphin64 Messages postés 2 Date d'inscription dimanche 1 février 2009 Statut Membre Dernière intervention 1 février 2009 - 1 févr. 2009 à 16:23
 toto - 1 févr. 2009 à 19:56
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);
0
Dauphin64 Messages postés 2 Date d'inscription dimanche 1 février 2009 Statut Membre Dernière intervention 1 février 2009
1 févr. 2009 à 18:06
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);
0
C'est la fonction "faite pour". Nettement mieux que mon bricolage avec eval.
0