1 | <?php |
---|
2 | |
---|
3 | # |
---|
4 | # quelques fonctions pour convertir un Array php en chaine de caractères et vis-versa. |
---|
5 | # |
---|
6 | # l'idée, à la base, c'était de trouver un format pour pouvoir sauver un Array php |
---|
7 | # dans un fichier texte. ça permet de sauvegarder des données structurées, sans avoir |
---|
8 | # à passer par une base de données. |
---|
9 | # |
---|
10 | # |
---|
11 | # SYNTAXE: |
---|
12 | # |
---|
13 | # ---------------------------------------------------------------------------------- |
---|
14 | # tab_to_str($TAB) |
---|
15 | # |
---|
16 | # retourne une chaine de caractères qui représente $TAB. $TAB doit être du type Array. |
---|
17 | # |
---|
18 | # NOTE: la convertion en chaine de caractères marche si les valeurs du tableau |
---|
19 | # sont des chaines de caractères, des nombres ou des tableaux, mais c'est |
---|
20 | # pas dit que ça marche pour d'autre types de variables. |
---|
21 | # |
---|
22 | # Autrement dit, le tableau $TAB peut lui-même contenir des tableaux, qui |
---|
23 | # peuvent eux-même contenir des tableaux (...), tant que les valeurs restent |
---|
24 | # des chaines de caractères, des nombres ou des tableaux. |
---|
25 | # |
---|
26 | # |
---|
27 | # ---------------------------------------------------------------------------------- |
---|
28 | # str_to_tab($str) |
---|
29 | # |
---|
30 | # retourne un Array qui correspond à la chaine de caractère $str. $str doit avoir |
---|
31 | # été crée avec la fonction tab_to_str. |
---|
32 | # |
---|
33 | |
---|
34 | |
---|
35 | function tab_to_str($TAB) { return _tab_to_str("", $TAB); } |
---|
36 | |
---|
37 | function _tab_to_str($pre, $TAB) |
---|
38 | { $content = ""; |
---|
39 | if($TAB) |
---|
40 | { foreach($TAB as $key => $value) |
---|
41 | { if(is_array($value)) $content .= _tab_to_str($pre.strlen($key).":".$key, $TAB[$key]); |
---|
42 | else $content .= $pre.strlen($key).":".$key.strlen($value).":".$value."\n"; |
---|
43 | } |
---|
44 | } |
---|
45 | else return $pre."a:\n"; |
---|
46 | return $content; |
---|
47 | } |
---|
48 | |
---|
49 | function str_to_tab($content) |
---|
50 | { $TAB = array(); |
---|
51 | $n = 0; |
---|
52 | while($n < strlen($content)) |
---|
53 | { $LINE_FOUND = 0; |
---|
54 | $ENDS_WITH_EMPTY_TAB = 0; |
---|
55 | $words = array(); |
---|
56 | while($n < strlen($content) && !$LINE_FOUND) |
---|
57 | { $length = ""; |
---|
58 | $word = ""; |
---|
59 | while($n < strlen($content) && strcmp(substr($content, $n, 1), ":") != 0) { $length .= $content[$n]; $n++; } $n++; |
---|
60 | if(strcmp($length, "a") == 0) $ENDS_WITH_EMPTY_TAB = 1; |
---|
61 | else |
---|
62 | { for($k = 0; $k < $length; $k++) { $word .= $content[$n]; $n++; } |
---|
63 | $words[] = $word; |
---|
64 | } |
---|
65 | $LINE_FOUND = $ENDS_WITH_EMPTY_TAB || $n == strlen($content) || strcmp(substr($content, $n, 1), "\n") == 0; |
---|
66 | } |
---|
67 | $n++; |
---|
68 | if($words) $TAB = affect($TAB, $words, $ENDS_WITH_EMPTY_TAB); |
---|
69 | } |
---|
70 | return $TAB; |
---|
71 | } |
---|
72 | |
---|
73 | function affect($TAB, $words, $ENDS_WITH_EMPTY_TAB) |
---|
74 | { if(count($words) > ($ENDS_WITH_EMPTY_TAB ? 1 : 2)) |
---|
75 | { if(!is_array($TAB[$words[0]])) $TAB[$words[0]] = array(); |
---|
76 | $_words = array(); |
---|
77 | $FIRST = 1; |
---|
78 | foreach($words as $word) |
---|
79 | { if($FIRST) $FIRST = 0; |
---|
80 | else $_words[] = $word; |
---|
81 | } |
---|
82 | $TAB[$words[0]] = affect($TAB[$words[0]], $_words, $ENDS_WITH_EMPTY_TAB); |
---|
83 | } |
---|
84 | else $TAB[$words[0]] = ($ENDS_WITH_EMPTY_TAB ? array() : $words[1]); |
---|
85 | return $TAB; |
---|
86 | } |
---|
87 | |
---|
88 | ?> |
---|