2016-03-30 17 views
0

シンプルに見えるかもしれませんが、私はこのケースで数日間苦労しており、解決策を見つけることができませんでした。私は、次の行にそれを説明する:PHP - 再帰的なサブカテゴリの追加

私が持っているもの

私は2つのアレイ持っている:カテゴリの順序とそれらのカテゴリの値を持つ別の1のものを。何かが次のように:あなたが見ることができるように

$orders = 
    [ 
     { 
      category: 3 
     }, 
     { 
      category: 8 
     } 
    ]; 

$values = 
    { 
     3: [ 
      { 
       id: 1, 
       value: 'Value 1' 
      }, 
      { 
       id: 2, 
       value: 'Value 2' 
      }, 
      { 
       id: 3, 
       value: 'Value 3' 
      } 
     ], 
     8: [ 
      { 
       id: 6, 
       value: 'Value 6' 
      }, 
      { 
       id: 7, 
       value: 'Value 7' 
      } 
     ] 
    }; 

は、2つのカテゴリがあるが、彼らは(彼らの10まで、実際には)多くをすることができます。

EDIT

resultと他の変数との関係は、あなたが見ることができるように、カテゴリ3が初であるとして、カテゴリー3は、そうid 1、2と3を使用して値を持っている、ということですorder配列では、カテゴリ3のすべてのカテゴリを取得する必要があります。

したがって、説明サンプルとして、カテゴリ3.1(および3.2と3.3)にはサブカテゴリ8.6と8.7が含まれている必要があります。

は私が

を必要とする私は順序を考慮に入れて、彼らは以前の1のそれぞれをサブカテゴリにする必要があります。したがって、順序が最初のカテゴリ番号3であり、カテゴリ番号8である場合、カテゴリ3のすべての値の内側にある必要があります(カテゴリが追加された場合は、次のカテゴリの各値カテゴリ番号8の下にある)。

は、だから私は持っているために必要なもの次の結果である:私は私が試したすべてのアプローチを記述することはできません

を試してみたが、私はように見えることはできませんどのような

$result = 
    [ 
     { 
      category: {id: 1}, // Category 3 first value 
      subcategories: [ 
       { 
        category: {id: 6} // Category 8 first value 
       }, 
       { 
        category: {id: 7} // Category 8 second value 
       } 
      ] 
     }, 
     { 
      category: {id: 2}, // Category 3 second value 
      subcategories: [ 
       { 
        category: {id: 6} // Category 8 first value 
       }, 
       { 
        category: {id: 7} // Category 8 second value 
       } 
      ] 
     }, 
     { 
      category: {id: 3}, // Category 3 third value 
      subcategories: [ 
       { 
        category: {id: 6} // Category 8 first value 
       }, 
       { 
        category: {id: 7} // Category 8 second value 
       } 
      ] 
     } 
    ] 

これに適した解決策を見つけてください。

私は再帰関数を試しました(これを実装する正しい方法だと思いますが)。'スタック呼び出しを超過しました'エラーのようなものです。

破棄

データソースは開いているので変更することができます。しかし、私はこの方法でこの方法をとっておきたいと思います。なぜなら、この構造には将来の意味があるからです。必要であれば、変更することもできます。

+0

"私が必要なもの"の部分の '$ result'オブジェクトを実際に理解していません。 '$ orders'は' $ result'にどのように変換されますか?そこにはカテゴリ8も見えません。 – Mike

+0

私は質問を編集しました(私が持っているものの下で)ので、それはより明確です。あなたの時間をありがとう、それを混乱させて申し訳ありません。 – Unapedra

答えて

0

私はそれを持っていると思います!ここで

は、少なくともしばらくの間、動作します(と私が好きな私はordersできるだけ多くを追加することができます)、という私が使用しているコードです:

$result = array(); 
$objtoadd = array(); 

for($i = sizeof($orders)-1; $i >= 0; $i--){ 

    $objtoadd[$i] = array(); 
    $objtoadd[$i]['subcategories'] = array(); 

    $act_gr = $orders[$i]; 
    $obj; 

    foreach($values[$act_gr->category] as $sub){ 

     $obj = array(); 
     $obj['category'] = $sub; 

     if(isset($objtoadd[$i+1]) && sizeof($objtoadd[$i+1]['subcategories']) > 0) $obj['subcategories'] = $objtoadd[$i+1]['subcategories']; 

     $objtoadd[$i]['subcategories'][] = $obj; 

    } 

    if($i === 0 && isset($objtoadd[$i]) && isset($objtoadd[$i]['subcategories'])) $result = $objtoadd[$i]['subcategories']; 

} 

echo json_encode($result); 

は、あなたの時間と回答のためのみんなに感謝し、そしてあなたの忍耐のために!

関連する問題