2009-05-11 8 views
2

これが不明な場合は私に負担をかけてください。私はこの問題の周りに頭を抱えているので(なぜ私はここに助けを求めるのか)困っている。再帰におけるトラッキングの深さ

Array 
(
[DimA1] => Array 
    (
     [DimB1] => Array 
      (
       [DimC1] => Array 
        (
         [value1] => 13708 
         [value2] => 4.5 
        ) 

       [DimC2] => Array 
        (
         [value1] => 1846 
         [value2] => 15.8 
        ) 

      ) 

     [DimB2] => Array 
      (
       [DimC1] => Array 
        (
         [value1] => 18166 
         [value2] => 6.4 
        ) 
      ) 
[DimA2] => Array 
    (
     ....... etc 

私はこの配列をステップ実行する必要があると私はvalue1とvalue2のことを得るとき、私はいくつかのデータベースの挿入を実行する必要があります。

私はこのようになります配列を持っています。現時点では、私は現在どのアレイを使用しているのかを知り、データベース名の一部としてキー名を使用する必要があります。

public function recurseCounts($array,$dims = array()) { 
    foreach ($array as $key => $value) { 
     $dims[] = $key; 
     if (isset($value['value1']) || isset($value['value2'])) { 
      print_r($value); // For debugging... 
      print_r($dims); // For debugging... 
          // DB Logic to insert dimensions in to DB here 
          // DB Logic to insert values in to DB here 
      array_pop($dims); 
     } else { 
      $this->recurseCounts($value,$dims); 
     } 
    } 
} 

これは物事が奇抜取得を開始場所それはだ、ループがDimB2に当たる時点まで動作します:

私の現在のソリューションは、このようになります。

これを解決する方法はありますか?

答えて

2

あなたは常に$暗くなるまで追加されています。

$暗くなり今行く:

DimA1 
DimA1, DimB1 
DimA1, DimB1, DimC1 
DimA1, DimB1, DimC2 
DimA1, DimB1, DimB2 
DimA1, DimB1, DimB2, DimC1 
DimA1, DimB1, DimB2, DimC2 

[OK]をする必要があるかどうかを外部にarray_popを移動した場合。

public function recurseCounts($array,$dims = array()) { 
    foreach ($array as $key => $value) { 
      $dims[] = $key; 
      if (isset($value['value1']) || isset($value['value2'])) { 
        print_r($value); // For debugging... 
        print_r($dims); // For debugging... 
         // DB Logic to insert dimensions in to DB here 
         // DB Logic to insert values in to DB here 
      } else { 
        $this->recurseCounts($value,$dims); 
      } 
      array_pop($dims); 
    } 

}

1

深さ「C」のキーが同じであるので、あなたは、要素への完全なパスを追跡する必要があります。

public function recurseCounts($array,$dims = array(),$path = '') { 
     foreach ($array as $key => $value) { 
       $dims[] = ($path ? $Path.'_' : '').$key; // Add the full path (separated by '_') 
       if (isset($value['value1']) || isset($value['value2'])) { 
         print_r($value); // For debugging... 
         print_r($dims); // For debugging... 
          // DB Logic to insert dimensions in to DB here 
          // DB Logic to insert values in to DB here 
         array_pop($dims); 
       } else { 
         $this->recurseCounts($value,$dims,end($depth)); // pass it on 
       } 
     } 
} 
関連する問題