Commit | Line | Data |
---|---|---|
5c38a355 P |
1 | <?php |
2 | /* petite aide suivant une idée héritée de Python */ | |
3 | function format_with_dict($str, $dict) { | |
4 | if (!is_array($dict)) { | |
5 | echo "ERROR: second parameter must be a dictionary.\n"; | |
6 | return $str; | |
7 | } | |
8 | $result = array(); | |
9 | $dict_idx = 0; | |
10 | $offset = 0; | |
11 | $pos = strpos($str, '%', $offset); | |
12 | while ($pos !== false && $pos < strlen($str)-1) { | |
13 | $result[] = substr($str, $offset, $pos-$offset); | |
14 | $offset = $pos + 2; | |
15 | if ($str[$offset-1] == '%') { | |
16 | $result[] = '%'; | |
17 | } elseif ($str[$offset-1] == '(') { | |
18 | // $pos = strpos($str, ')', $offset); | |
19 | for ($pos=$offset;$pos<strlen($str)&&(ctype_alnum($str[$pos])||$str[$pos]=='_');$pos++) ; | |
20 | if ($pos < strlen($str)-1 && $str[$pos] == ')') { | |
21 | $var = substr($str, $offset, $pos-$offset); | |
22 | $offset = $pos + 2; | |
23 | if (isset($dict[$var])) { | |
24 | $result[] = $dict[$var]; | |
25 | } else { | |
26 | echo "WARNING: '".$var."' not found in dictionary.\n"; | |
27 | $result[] = "%(".$var.")s"; | |
28 | } | |
29 | } else { | |
30 | echo "ERROR: unterminated format string '".$str."'.\n"; | |
31 | $result[] = "%("; | |
32 | } | |
33 | } elseif ($str[$offset-1] == 's') { | |
34 | if ($dict_idx < sizeof($dict)) { | |
35 | $result[] = $dict[$dict_idx]; | |
36 | $dict_idx++; | |
37 | } else { | |
38 | echo "WARNING: array index '".$dict_idx."' out of boundary.\n"; | |
39 | $result[] = "%s"; | |
40 | } | |
41 | } else { | |
42 | // if ($str[$offset] != 's') { | |
43 | echo "WARNING: unsupported format type '".$str[$offset-1]."'.\n"; | |
44 | $result[] = "%".$str[$offset-1]; | |
45 | } | |
46 | // $result[] = substr($str, $offset, $pos-$offset); | |
47 | $pos = strpos($str, '%', $offset); | |
48 | } | |
49 | $result[] = substr($str, $offset); | |
50 | return implode('', $result); | |
51 | } | |
52 | /* | |
53 | $str = ' | |
54 | Nom : %(noms | |
55 | Prenom : %(prenom)s | |
56 | Identité : %(nom_prenom)s | |
57 | Inconnue : %(inconnue)s | |
58 | Résultat : 4%% | |
59 | Champ 1 : %s | |
60 | Champ 2 : %s | |
61 | Champ 3 : %s | |
62 | Fin %d | |
63 | '; | |
64 | $dict = Array('nom'=>'A', 'prenom'=>'JC', 'nom_prenom'=>'JCA', 'c1', 'c2'); | |
65 | echo "<pre>"; | |
66 | echo format_with_dict($str, $dict); | |
67 | echo "</pre>"; | |
68 | */ | |
69 | ?> |