2011-02-08 3 views
1

J'ai un petit problème avec une récursivité en PHP. J'ai lu beaucoup d'articles mais la solution ne vient pas.récursivité PHP: Comment créer une récursivité en php

Je possède ce tableau:

[59] => Array 
    (
     [ID] => REL000000 
     [Name] => RELIGIONE/Generale 
     [Description] => 
     [IdParent] => 
    ) 

[799] => Array 
    (
     [ID] => REL102000 
     [Name] => RELIGIONE/Teologia 
     [Description] => 
     [IdParent] => REL000000 
    ) 

[800] => Array 
    (
     [ID] => REL068000 
     [Name] => RELIGIONE/Teosofia 
     [Description] => 
     [IdParent] => REL000000 
    ) 

[801] => Array 
    (
     [ID] => REL103000 
     [Name] => RELIGIONE/Universalismo Unitario 
     [Description] => 
     [IdParent] => REL000000 
    ) 

[802] => Array 
    (
     [ID] => REL034000 
     [Name] => RELIGIONE/FestivitÃ/Generale 
     [Description] => 
     [IdParent] => REL000000 
    ) 

Je voudrais créer un arbre hiérarchique où le match sur le terrain IdParent avec le champ ID.

Est-ce que quelqu'un m'aider?

grâce

Répondre

2

Utilisez l'opérateur &:

$array[$id_child]['parent'] = &$array[$id_parent]; 

et aussi:

$array[$id_parent]['children'][] = &$array[$id_child]; 
+0

Où ai-je écrit ce code? Ce n'est pas clair. – Michelangelo

+0

Je ne peux pas dire où vous devriez le mettre sauf si vous me fournissez le reste de votre code. Dans les deux lignes ci-dessus, $ array est le tableau que vous avez fourni dans la question, $ id_child et $ id_parent sont respectivement les clés d'un enfant et d'un parent ($ array [$ id_child] est un enfant de $ array [$ id_parent], et vice versa, ce dernier est le parent du premier). – CAFxX

0
a[59]['IdParent'] = a[59]['ID']; 

ne fait pas que le travail selon votre question?

0
// There is a function maybe useful 
/** 
* get all sub 
* 
* @author Tom 
* @date 2017-12-21 
* @param array $array The array 
* @param int|str $topId the the top ID 
* @param int  $lev the the lev(It's ver useful in some case) 
* @return array $result all sub data 
*/ 
function getLower($array, $topId, $lev = 0) { 
    $result = []; 
    foreach ($array as $key => $value) { 
     if ($value['IdParent'] == $topId) { 
      $value['lev'] = $lev; // the level 
      $result[]  = $value; 
      $result  = array_merge($result, getLower($array, $value['ID'], $lev + 1)); 
     } 
    } 
    return $result; 
} 
+1

en ajoutant une description avec votre réponse est agréable –

+0

Vous réservoir pour vos conseils. Parce que mon anglais est tellement. Donc c'est très dur pour moi. Mais je ferai de mon mieux pour le faire quand je serai libre. –