Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2426 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Creation d'une array recursive

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Creation d'une array recursive

n°1866008
stealth35
Posté le 26-03-2009 à 10:33:27  profilanswer
 

Bonjour, j'ai des données de ce type    /11/68,   /56/89/188.......
 
je voudrais pour chaque valeur créer un arbre genre


Array
(
    [11] => Array
        (
           [68] => null
        )
 
)
 
 
Array
(
    [56] => Array
        (
           [89] => Array
                 (
                 [188] => null  
             )
        )
 
)
 


Message édité par stealth35 le 26-03-2009 à 10:33:43
mood
Publicité
Posté le 26-03-2009 à 10:33:27  profilanswer
 

n°1866025
rufo
Pas me confondre avec Lycos!
Posté le 26-03-2009 à 10:48:47  profilanswer
 

et c'est quoi la question, précisément :??: Je vois pas où est ton pb...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°1866028
stealth35
Posté le 26-03-2009 à 10:51:37  profilanswer
 

mon problème c'est que la je viens d'écrire ca a la main, mais je veux une fonction pour faire ca

n°1866083
rufo
Pas me confondre avec Lycos!
Posté le 26-03-2009 à 11:42:23  profilanswer
 

j'ai cherché 1 peu mais j'ai pas trouvé grand chose de concluant. J'ai déjà travaillé avec ce genre de structure et j'utilise un tableau associatif de ce type :

Code :
  1. $ArrayTree = array("Value" => array(), "Level" => array());


 
Avec explode sur '/', ça se remplit facilement :

Code :
  1. $ArrayData = array("11/68", "56/89/188" );
  2. $ArrayTree = array("Value" => array(), "Level" => array());
  3. foreach($ArrayData as $d => $Data)
  4. {
  5.     $ArrayTmp = explode('/', $Data);
  6.     foreach($ArrayTmp as $t => $Value)
  7.     {
  8.         $ArrayTree["value"][] = $Value;
  9.         $ArrayTree["Level"][] = $t;
  10.     }
  11. }


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°1866088
stealth35
Posté le 26-03-2009 à 11:48:13  profilanswer
 

je suis sur que c'est tout con,
enfaite a la fin avec array_merge_recursive, j'aimerai un tableau unique avec mes valeurs dedoublonner genre :

 

11/68,  56/89/188, 11/87/12

 

Array
(
    [11] => Array
        (
           [68] => null
           [87] => Array
                (
                  [12] => null
             )
        )

 

[56] => Array
        (
           [89] => Array
                 (
                 [188] => null  
             )
        )
 
)


Message édité par stealth35 le 26-03-2009 à 13:07:15
n°1866114
guybrush02
Posté le 26-03-2009 à 12:29:16  profilanswer
 

Dans ton exemple, pourquoi 89 et 188 sont des fils de 11 ? Et pourquoi 89 et 12 n'apparaissent pas à la racine ?  
 
A priori, ce que tu souhaites faire, c'est obtenir un arbre classique, c'est cela ?

n°1866116
DaSayan
Posté le 26-03-2009 à 12:35:25  profilanswer
 

Normalement, en passant le tableau des données au format string avec une fonction en récursif, tu pourrais obtenir ton tableau final, non ?


---------------
Tous les programmeurs sont des auteurs et tous les ordinateurs sont de mauvais acteurs.
n°1866131
stealth35
Posté le 26-03-2009 à 13:05:29  profilanswer
 

oula je me suis tromper dans mes exemples, j'ai corrigé,
 
guybrush02-> oui pour l'abre classique
DaSayan-> en json peu etre
 

n°1866190
guybrush02
Posté le 26-03-2009 à 14:22:48  profilanswer
 

Ce que tu souhaites, c'est avoir l'affichage que tu as montré, ou bien c'est le stockage représenté par ton affichage ?  
 
Si c'est ce dernier point, ça se construit comme un arbre classique, en pseudo-pseudo-pseudo-code :  
 

Code :
  1. f(tree, str):
  2.   head, tail = lsplit("/", str, 1)
  3.   add(head, tree)
  4.   if tail is non empty:
  5.     return f(tree[head], tail)
  6.   else
  7.     return tree


et pour  

Code :
  1. add(el, tree):
  2.   if tree:
  3.     if not ( tree haskey el):
  4.       tree[el] = null
  5.   else:
  6.     tree = array(el)


Ou quelque chose du genre, mais l'idée est là (désolé, je n'ai malheureusement pas bcp de temps pour écrire ça un peu mieux et plus formellement).

n°1866202
stealth35
Posté le 26-03-2009 à 14:57:30  profilanswer
 

j'ai essayer de faire ton pseudo-pseudo-pseudo-code  en php
 
on doit pas etre loin mem si ca marche pas
 

$list = "11/64/89/189";
 $array = array();
 
 f($array, $list);
 
 function f($tree, $str){
  $chaine = split("/", $str, 2);
  $head = $chaine[0];
  $tail = $chaine[1];
  $tree = add($head, $tree);
  if($tail){
   return f($tree[$head], $tail);
  }else{
   return $tree;
  }
 }
 
 function add($el, $tree){
  if(is_array($tree)){
   if(array_key_exists($el, $tree)){
    $tree[$el] = null;
   }else{
    $tree = array($el);
   }
 
  }
return $tree;
 
 }


Message édité par stealth35 le 26-03-2009 à 15:20:08
mood
Publicité
Posté le 26-03-2009 à 14:57:30  profilanswer
 

n°1866311
stealth35
Posté le 26-03-2009 à 16:54:54  profilanswer
 

bon j'ai reussi mais en json, donc si quelqu'un trouve sans passer par le json ca serais mieux
 

$list = "11/64/89/189";
 
 $l = f('', $list);
 print_r(json_decode($l, true));
 
 function f($tree, $str){
  $chaine = split("/", $str, 2);
  $head = $chaine[0];
  $tail = @$chaine[1];
 
  $tree .=  '{';  
  $tree .=  '"' . $head . '":';
   
  if($tail){  
   $tree =  f($tree, $tail);    
  }else{
   $tree .=  'null';
  }
   
  $tree .=  '}';
   
  return $tree;
 }


Message édité par stealth35 le 26-03-2009 à 16:55:04
n°1920476
stealth35
Posté le 02-09-2009 à 00:34:31  profilanswer
 

un petit UP parce j'ai un serveur qui gere pas le json, et je voudais que ca soit plus propre quand meme (pas se serialize non plus)


Message édité par stealth35 le 02-09-2009 à 00:34:43
n°1920478
stealth35
Posté le 02-09-2009 à 02:09:51  profilanswer
 

ducoup je me re repond que j'ai reussi

 


$paths = explode('/', $item);
array_shift($paths);  
$depth = count($paths) - 1;
 
$tree = array_fill_keys($paths, array());  
 
while($depth)
{
    $cat = $paths[$depth - 1];
   
    $last = array_pop($paths);
    $tree[$cat] = array($last  => $tree[$last]);
    array_pop($tree);
 
    --$depth;
}
 
print_r($tree);


Message édité par stealth35 le 02-09-2009 à 02:10:42

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Creation d'une array recursive

 

Sujets relatifs
Création d'une macro VBA complexe HELP !!!Création macro pour un fichier Excel de 600p et 13000 lignes
[SQL] requete recursive automatiquepb lors creation d'une classe generic en java pour type primitif
Erreur de type Warning: mysql_fetch_array()[résolu] Création de dossier
creation menu en VBA ??Aide pour la création d'un site.
Creation d'un requete Register vers un serveur sip avec jain-sipcreation interface requete pour utilisateur
Plus de sujets relatifs à : Creation d'une array recursive


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR