2017-05-18 27 views
0

私は、従業員データの配列をJSONに変換し、プラグインに渡してorgチャートを作成しています。組織図には複数のレベルがあり、私の目標はそれらのレベルを色分けしてさまざまな組織を表示することです。PHP配列の繰り返しとキー/値の挿入

私の配列はネストされており、managerchildrenを持っています。

私はこの配列をループし、さまざまなレベルの色を割り当てる方法を理解しようとしています。

たとえば、配列の最初のレベルは青、次のレベルは赤などです。私がする必要があるのは、classのキーを追加し、その値がlevelx(xはそれは深いレベルの数です)。

ここでの最終目標は、同じレベルのすべてのレコードに同じキー/値を追加する方法を理解することです。

ここにはclass keyの再生中の配列の例があります。

これを簡単にする入れ子配列内のレベルを判断できるPHP関数はありますか?

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

レベル制限はありますか? –

+0

@RayannNayran制限はありません。これは、見られる人の下に何人の従業員がいるかに応じて、深さ5レベルまたは深さ20レベルになります。 – SBB

+2

これを実装しようとしましたか? –

答えて

1

私は再帰的に配列を歩いて機能を作成します。

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

setLevel($arr, 1); 

demoを参照してください。

+0

これは私が必要としていたことに対して完全に機能しました。どうもありがとう。 – SBB

+0

さて、助けになってうれしいです。 –

関連する問題