[1] | 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 | ?> |
---|