source: branches/rsr.v5.1.dev/web/app/plugins/str_tab.php @ 6

Last change on this file since 6 was 1, checked in by dj3c1t, 13 years ago

import initial

File size: 3.0 KB
Line 
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?>
Note: See TracBrowser for help on using the repository browser.