root/_plugins_/spip-bonux-2/spip_bonux_options.php

Revision 35942, 3.6 KB (checked in by rastapopoulos@…, 9 days ago)

Une fonction que je trouve importante, toujours pour la manipulation de tableau, qui existe déjà dans PHP mais seulement à partir de la version 5.3. On l'ajoute donc pour les autres.

Line 
1<?php
2/**
3 * Plugin Spip-Bonux
4 * Le plugin qui lave plus SPIP que SPIP
5 * (c) 2008 Mathieu Marcillaud, Cedric Morin, Romy Tetue
6 * Licence GPL
7 *
8 */
9
10 /**
11 * une fonction qui regarde si $texte est une chaine de langue
12 * de la forme <:qqch:>
13 * si oui applique _T()
14 * si non applique typo() suivant le mode choisi
15 *
16 * @param unknown_type $valeur Une valeur à tester. Si c'est un tableau, la fonction s'appliquera récursivement dessus.
17 * @param string $mode_typo Le mode d'application de la fonction typo(), avec trois valeurs possibles "toujours", "jamais" ou "multi".
18 * @return unknown_type Retourne la valeur éventuellement modifiée.
19 */
20function _T_ou_typo($valeur, $mode_typo='toujours') {
21       
22        // Si la valeur est bien une chaine (et pas non plus un entier déguisé)
23        if (is_string($valeur) and !intval($valeur)){
24                // Si la chaine est du type <:truc:> on passe à _T()
25                if (preg_match('/^\<:(.*?):\>$/', $valeur, $match)) 
26                        $valeur = _T($match[1]);
27                // Sinon on la passe a typo()
28                else {
29                        if (!in_array($mode_typo, array('toujours', 'multi', 'jamais')))
30                                $mode_typo = 'toujours';
31                       
32                        if ($mode_typo == 'toujours' or ($mode_typo == 'multi' and strpos($valeur, '<multi>') !== false)){
33                                include_spip('inc/texte');
34                                $valeur = typo($valeur);
35                        }
36                }
37        }
38        // Si c'est un tableau, on reapplique la fonction récursivement
39        elseif (is_array($valeur)){
40                foreach ($valeur as $cle => $valeur2){
41                        $valeur[$cle] = _T_ou_typo($valeur2, $mode_typo);
42                }
43        }
44
45        return $valeur;
46
47}
48
49/*
50 * InsÚre toutes les valeurs du tableau $arr2 aprÚs (ou avant) $cle dans le tableau $arr1.
51 * Si $cle n'est pas trouvé, les valeurs de $arr2 seront ajoutés à la fin de $arr1.
52 *
53 * La fonction garde autant que possible les associations entre les clés. Elle fonctionnera donc aussi bien
54 * avec des tableaux à index numérique que des tableaux associatifs.
55 * Attention tout de même, elle utilise array_merge() donc les valeurs de clés étant en conflits seront écrasées.
56 *
57 * @param array $arr1 Tableau dans lequel se fera l'insertion
58 * @param unknown_type $cle Clé de $arr1 aprÚs (ou avant) laquelle se fera l'insertion
59 * @param array $arr2 Tableau contenant les valeurs à insérer
60 * @param bool $avant Indique si l'insertion se fait avant la clé (par défaut c'est aprÚs)
61 * @return array Retourne le tableau avec l'insertion
62 */
63function array_insert($arr1, $cle, $arr2, $avant=false){
64        $index = array_search($cle, array_keys($arr1));
65        if($index === false){
66                $index = count($arr1); // insert @ end of array if $key not found
67        }
68        else {
69                if(!$avant){
70                        $index++;
71                }
72        }
73        $fin = array_splice($arr1, $index);
74        return array_merge($arr1, $arr2, $fin);
75}
76
77/*
78 * Une fonction extrêmement pratique, mais qui n'est disponible qu'à partir de PHP 5.3 !
79 * cf. http://www.php.net/manual/fr/function.array-replace-recursive.php
80 */
81if (!function_exists('array_replace_recursive')){
82        function array_replace_recursive($array, $array1){
83                function recurse($array, $array1){
84                        foreach ($array1 as $key => $value){
85                                // create new key in $array, if it is empty or not an array
86                                if (!isset($array[$key]) || (isset($array[$key]) && !is_array($array[$key])))
87                                        $array[$key] = array();
88                                // overwrite the value in the base array
89                                if (is_array($value))
90                                        $value = recurse($array[$key], $value);
91                                $array[$key] = $value;
92                        }
93                        return $array;
94                }
95
96                // handle the arguments, merge one by one
97                $args = func_get_args();
98                $array = $args[0];
99                if (!is_array($array))
100                        return $array;
101               
102                for ($i = 1; $i < count($args); $i++)
103                        if (is_array($args[$i]))
104                                $array = recurse($array, $args[$i]);
105               
106                return $array;
107        }
108}
109
110if (defined('_BONUX_STYLE'))
111        _chemin(_DIR_PLUGIN_SPIP_BONUX."spip21/");
112
113?>
Note: See TracBrowser for help on using the browser.