Overview

Packages

  • Framework
  • None
  • PHP
  • Utilitaire

Classes

  • Chaine
  • Encodage
  • Fichier
  • Pattern
  • Tableau
  • Overview
  • Package
  • Class
  • Tree
  • Deprecated
  • Todo
 1: <?php
 2: // declare(encoding='UTF-8');
 3: /**
 4:  * Classe fournissant des méthodes statiques de manipulation des tableaux (Array).
 5:  *
 6:  * @category    PHP 5.2
 7:  * @package Utilitaire
 8:  * @author      Jean-Pascal MILCENT <jpm@tela-botanica.org>
 9:  * @copyright   Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org)
10:  * @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL-v3
11:  * @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL-v2
12:  * @version $Id: Tableau.php 400 2011-11-25 16:26:26Z jpm $
13:  * @link        /doc/framework/
14:  */
15: class Tableau {
16: 
17:     /**
18:      * Etend le tableau à étendre avec les données du tableau à copier. Si des clés sont identiques entre les deux tableaux
19:      * une erreur est déclenchée et la valeur du tableau à étendre est gardée. Si les deux tableaux ont des clés numériques
20:      * leurs valeurs sont gardées (à la différence de array_merge).
21:      * Les tableaux sont passés par références et le tableau à copier est progressivement détruit pour éviter la consomation
22:      * de mémoire.
23:      *
24:      * @param array $tableau_a_etendre
25:      * @param array $tableau_a_copier
26:      * @return void
27:      */
28:     public static function etendre(Array &$tableau_a_etendre, Array &$tableau_a_copier) {
29:         $cles_existantes = null;
30:         foreach($tableau_a_copier as $cle => $val) {
31:             if (!isset($tableau_a_etendre[$cle])) {
32:                 $tableau_a_etendre[$cle] = $val;
33:                 unset($tableau_a_copier[$cle]);
34:             } else {
35:                 $cles_existantes[] = $cle;
36:             }
37:         }
38:         if (is_array($cles_existantes)) {
39:             $e = "Le tableau a étendre contenait déjà les clés suivantes : ".implode(', ', $cles_existantes);
40:             trigger_error($e, E_USER_WARNING);
41:         }
42:     }
43: 
44:     /**
45:      * @deprecated Utiliser la méthode trierMD()
46:      * @see  trierMD()
47:      */
48:     public static function trierTableauMd($array, $cols) {
49:         return self::trierMD($array, $cols);
50:     }
51: 
52:     /**
53:      * Permet de trier un tableau multi-dimenssionnel en gardant l'ordre des clés.
54:      *
55:      * @param Array $array le tableau à trier
56:      * @param Array $cols tableau indiquant en clé la colonne à trier et en valeur l'ordre avec SORT_ASC ou SORT_DESC
57:      * @return Array le tableau trié.
58:      * @author cagret at gmail dot com
59:      * @see  http://fr.php.net/manual/fr/function.array-multisort.php Post du 21-Jun-2009 12:38
60:      */
61:     public static function trierMD($array, $cols) {
62:         $colarr = array();
63:         foreach ($cols as $col => $order) {
64:         $colarr[$col] = array();
65:             foreach ($array as $k => $row) {
66:                 $colarr[$col]['_'.$k] = strtolower($row[$col]);
67:             }
68:         }
69:         $params = array();
70:         foreach ($cols as $col => $order) {
71:             $params[] =& $colarr[$col];
72:             $orders = (array) $order;
73:             foreach($orders as $orderElement) {
74:                 $params[] =& $orderElement;
75:             }
76:         }
77:         call_user_func_array('array_multisort', $params);
78:         $ret = array();
79:         $keys = array();
80:         $first = true;
81:         foreach ($colarr as $col => $arr) {
82:             foreach ($arr as $k => $v) {
83:                 if ($first) {
84:                     $keys[$k] = substr($k, 1);
85:                 }
86:                 $k = $keys[$k];
87:                 if (!isset($ret[$k])) {
88:                     $ret[$k] = $array[$k];
89:                 }
90:                 $ret[$k][$col] = $array[$k][$col];
91:             }
92:             $first = false;
93:         }
94:         return $ret;
95:     }
96: }
97: ?>
TBFramework - v0.3 API documentation generated by ApiGen 2.8.0