2017-05-18 6 views
0

Ich habe eine Reihe von Mitarbeiterdaten, mit denen ich arbeite, die ich in JSON konvertieren und an ein Plugin übergeben, um ein Organigramm zu erstellen. Das Organigramm hat mehrere Ebenen und mein Ziel ist es, diese Ebenen farblich zu kodieren, um die verschiedenen Organisationen anzuzeigen.PHP Iterate über Array und Schlüssel/Wert einfügen

Mein Array ist verschachtelt und hat die manager und die children.

Ich versuche herauszufinden, wie ich über dieses Array Schleife und eine Farbe für die verschiedenen Ebenen zuweisen kann.

Zum Beispiel wäre die erste Ebene des Arrays blau, die nächste Ebene wäre rot usw. Alles, was ich tun muss, ist einen Schlüssel für class und dann seinen Wert, der levelx wäre (wo x ist die Anzahl der Ebenen tief ist es).

Das Endziel hier ist nur in der Lage herauszufinden, wie Sie den gleichen Schlüssel/Wert auf alle Datensätze auf der gleichen Ebene hinzufügen.

Hier ist ein Beispiel für das Array mit der class key im Spiel.

Gibt es irgendwelche PHP-Funktionen, die ihre Ebene innerhalb eines verschachtelten Arrays bestimmen können, die das vereinfachen?

Array 
(
    [0] => Array 
     (
      [QID] => Q1234 
      [MgrQID] => Array 
       (
       ) 

      [NTID] => xxxxx 
      [MgrNTID] => xxxx 
      [title] => xxxx 
      [MgrName] => xxxx 
      [name] => Bob Jones 
      [class] => level1 
      [CountOfDirects] => 9 
      [children] => Array 
       (
        [0] => Array 
         (
          [QID] => Q56789 
          [MgrQID] => 1234 
          [NTID] => xxxx 
          [MgrNTID] => xxxx 
          [title] => xxxx 
          [MgrName] => xxxx 
          [name] => Tim Cook 
          [class] => level2 
          [CountOfDirects] => 0 
          [children] => Array 
           (
           ) 

         ) 

        [1] => Array 
         (
          [QID] => Q5678 
          [MgrQID] => Q1234 
          [NTID] => xxxxx 
          [MgrNTID] => xxxx 
          [title] => xxxx 
          [MgrName] => xxxx 
          [name] => Bob Tom 
          [class] => level2 
          [CountOfDirects] => 0 
          [children] => Array 
           (
           ) 

         ) 


        [2] => Array 
         (
          [QID] => Q9999 
          [MgrQID] => Q1234 
          [NTID] => xxxx 
          [MgrNTID] => xxxx 
          [title] => xxxx 
          [MgrName] => xxxx 
          [name] => xxxx 
          [class] => level2 
          [CountOfDirects] => 0 
          [children] => Array 
           (
           ) 

         ) 

        [3] => Array 
         (
          [QID] => Q6665 
          [MgrQID] => Q1234 
          [NTID] => xxxx 
          [MgrNTID] => xxxx 
          [title] => xxxx 
          [MgrName] => xxxx 
          [name] => xxxx 
          [class] => level2 
          [CountOfDirects] => 6 
          [children] => Array 
           (
            [0] => Array 
             (
              [QID] => Q4322 
              [MgrQID] => Q6665 
              [NTID] => xxxx 
              [MgrNTID] => xxxx 
              [title] => xxxx 
              [MgrName] => xxxx 
              [name] => xxxx 
              [class] => level3 
              [CountOfDirects] => 0 
              [children] => Array 
               (
               ) 

             ) 

            [1] => Array 
             (
              [QID] => Q3333 
              [MgrQID] => Q6665 
              [NTID] => xxxx 
              [MgrNTID] => xxxx 
              [title] => xxxx 
              [MgrName] => xxxx 
              [name] => xxxx 
              [class] => level3 
              [CountOfDirects] => 0 
              [children] => Array 
               (
               ) 

             ) 


           ) 

         ) 


       ) 

     ) 

) 
+0

Haben Sie ein Level-Limit? –

+0

@RayannNayran Es gibt keine Grenzen. Dies kann 5 Stufen tief oder 20 Stufen tief sein, abhängig davon, wie viele Mitarbeiter unter die Person fallen, die gerade angesehen wird. – SBB

+2

Haben Sie versucht, etwas zu implementieren? –

Antwort

1

würde ich eine Funktion erstellen Array gehen rekursiv: demo

function setLevel(&$arr, $level) 
{ 
    foreach ($arr as &$element) { 
     $element['class'] = 'level-' . $level; 
     setLevel($element['children'], $level + 1); 
    } 
} 

setLevel($arr, 1); 

See.

+0

Dies funktionierte perfekt für das, was ich brauchte. Danke vielmals. – SBB

+0

Nun, ich bin froh, dass es hilfreich war. –