[PHP] Organisation Array

Organisation Array [PHP] - PHP - Programmation

Marsh Posté le 02-02-2014 à 14:09:43    

Bien le bonjour à tous,
 
Je viens vers vous pour un petit problème de "mise en forme" d'un Array. Modifier un Array plat vers un Array hiérarchique (arbre ou tree en anglais).
Alors pour commencer l'array plat que je doit modifier je l'obtiens avec la fonction imap_getmailboxes, j'ai remplacer cet array par la variable $folders dans le code suivant.
 
J'ai déjà réussi à mettre en forme mon array hiérarchique, mais pas comme je le souhaite, voici le code :
 

Code :
  1. $folders = array(
  2.   array('Name' => 'Archive', 'Value' => 'Archive', 'Attributes' => 32, 'Delimiters' => '/'),
  3.   array('Name' => 'Folder1', 'Value' => 'Archive/Folder1', 'Attributes' => 32, 'Delimiters' => '/'),
  4.   array('Name' => 'Folder1A', 'Value' => 'Archive/Folder1/Folder1A', 'Attributes' => 32, 'Delimiters' => '/'),
  5.   array('Name' => 'Folder1B', 'Value' => 'Archive/Folder1/Folder1A/Folder1B', 'Attributes' => 64, 'Delimiters' => '/'),
  6.   array('Name' => 'Folder2', 'Value' => 'Archive/Folder2', 'Attributes' => 32, 'Delimiters' => '/'),
  7.   array('Name' => 'Folder2A', 'Value' => 'Archive/Folder2/Folder2A', 'Attributes' => 32, 'Delimiters' => '/'),
  8.   array('Name' => 'Folder2B', 'Value' => 'Archive/Folder2/Folder2A/Folder2B', 'Attributes' => 64, 'Delimiters' => '/'),
  9. );
  10.  
  11. $tree = BuildTree($folders);
  12. var_dump($tree);
  13. print_r($tree);
  14.  
  15. function BuildTree($array) {
  16.      $return = array();
  17.      foreach ($array as $value) {
  18.       $split = '/'.preg_quote($value['Delimiters'], '/').'/';
  19.       $parts = preg_split($split, $value['Value'], -1, PREG_SPLIT_NO_EMPTY);
  20.          $leafpart = array_pop($parts);
  21.          $parent = &$return;
  22.    
  23.          foreach ($parts as $part)
  24.              $parent = &$parent[$part];
  25.  
  26.    $parent[$leafpart] = array('Name' => $value['Name'], 'Value' => $value['Value']);
  27.      }
  28.      return $return;
  29. }


 
Avec se code on obtiens le résultat suivant :

Code :
  1. Array (
  2.     [Archive] => Array (
  3.         [Name] => Archive
  4.         [Value] => Archive
  5.         [Folder1] => Array (
  6.             [Name] => Folder1
  7.             [Value] => Archive/Folder1
  8.             [Folder1A] => Array (
  9.                 [Name] => Folder1A
  10.                 [Value] => Archive/Folder1/Folder1A
  11.                 [Folder1B] => Array (
  12.                     [Name] => Folder1B
  13.                     [Value] => Archive/Folder1/Folder1A/Folder1B
  14.                 )
  15.             )
  16.         )
  17.         [Folder2] => Array (
  18.             [Name] => Folder2
  19.             [Value] => Archive/Folder2
  20.             [Folder2A] => Array (
  21.                 [Name] => Folder2A
  22.                 [Value] => Archive/Folder2/Folder2A
  23.                 [Folder2B] => Array (
  24.                     [Name] => Folder2B
  25.                     [Value] => Archive/Folder2/Folder2A/Folder2B
  26.                 )
  27.             )
  28.         )
  29.     )


 
Hors j'aurais voulu obtenir ceci :

Code :
  1. Array (
  2.     [0] => Array (
  3.         [Name] => Archive
  4.         [Value] => Archive
  5.         [SubNode] => Array (
  6.             [0] => Array (
  7.                 [Name] => Folder1
  8.                 [Value] => Archive/Folder1
  9.                 [SubNode] => Array (
  10.                     [0] => Array (
  11.                         [Name] => Folder1A
  12.                         [Value] => Archive/Folder1/Folder1A
  13.                         [SubNode] => Array (
  14.                             [0] => Array (
  15.                                 [Name] => Folder1B
  16.                                 [Value] => Archive/Folder1/Folder1A/Folder1B
  17.                             )
  18.                         )
  19.                     )
  20.                 )
  21.             )
  22.             [1] => Array (
  23.                 [Name] => Folder2
  24.                 [Value] => Archive/Folder2
  25.                 [SubNode] => Array (
  26.                     [0] => Array (
  27.                         [Name] => Folder2A
  28.                         [Value] => Archive/Folder2/Folder2A
  29.                         [SubNode] => Array (
  30.                             [0] => Array (
  31.                                 [Name] => Folder2B
  32.                                 [Value] => Archive/Folder2/Folder2A/Folder2B
  33.                             )
  34.                         )
  35.                     )
  36.                 )
  37.             )
  38.         )
  39.     )
  40. )


 
Et je parviens pas à modifier mon code pour avoir se dernier résultat.
 
En gros je cherche à construire l'array suivant par le biais de ma fonction BuildTree
 

Code :
  1. $treefolders = array(
  2.      array('Name' => 'Archive', 'Value' => 'Archive', 'SubNode' =>
  3.          array(
  4.              array('Name' => 'Folder1', 'Value' => 'Archive/Folder1', 'SubNode' =>
  5.                  array('Name' => 'Folder1A', 'Value' => 'Archive/Folder1/Folder1A', 'SubNode' =>
  6.                      array('Name' => 'Folder1B', 'Value' => 'Archive/Folder1/Folder1A/Folder1B')
  7.                  )
  8.              ),
  9.              array('Name' => 'Folder2', 'Value' => 'Archive/Folder2', 'SubNode' =>
  10.                  array('Name' => 'Folder2A', 'Value' => 'Archive/Folder2/Folder2A', 'SubNode' =>
  11.                      array('Name' => 'Folder2B', 'Value' => 'Archive/Folder2/Folder2A/Folder2B')
  12.                  )
  13.              )
  14.          )
  15.      )
  16. );


   
Pouvez vous m'aider résoudre se problème ?
 
J'espère avoir été assez claire dans mes explications, s'il y a besoin de précision ou si je me suis mal exprimé, veuillez m'en faire part, je me ferais un plaisir de vous répondre.

Reply

Marsh Posté le 02-02-2014 à 14:09:43   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed