私は、あるアイテムが別のアイテムの子になることができるアイテムのツリーを作り、保存しようとしています。私は子供たちを見つけるために1つのレベル深く行くことができますコードの下で子の子を持つ配列をループする
[{"id":1},{"id":3,"children":[{"id":4},{"id":5},{"id":6}]},{"id":2},{"id":7,"children":[{"id":8},{"id":9}]},{"id":10,"children":[{"id":11},{"id":12}]}][{"id":1},{"id":3,"children":[{"id":4},{"id":5},{"id":6}]},{"id":2},{"id":7,"children":[{"id":8},{"id":9}]},{"id":10,"children":[{"id":11},{"id":12}]}]
:JSON
array(
[0] array(
'id' => 100
),
[1] array(
'id' => 101,
'children' => array(
[0] array(
'id' => 103
)
)
)
)
かのように:しかし、この子も、例えば私のような配列を取得していますので、子供などなどを持つことができますアクションを実行します。もちろん、子供がいる場合は別のものを追加することができますが、それは配列の一番下に来るif文とforeach文の大部分を意味します。特に私が知っているように、子供たちは実際には10レベルの深さになることがあります。
public function sortPages(Request $request) {
$data = json_decode($request->data);
foreach($data as $sort=>$id) {
$this->saveSortingOrder($id->id, $sort);
if(isset($id->children)) {
foreach($id->children as $sort_next=>$id_next) {
$this->saveSortingOrder($id_next->id, $sort_next);
$this->setParent($id_next->id, $id->id);
}
}
}
}
簡単な方法で作業を完了できますか?再帰が参考になっなります
public function sortPages(Request $request) {
$data = json_decode($request->data);
foreach($data as $sort_value=>$id) {
$this->saveSortingOrder($id->id, $sort_value);
if(isset($request->parent)) {
$this->setParent($id->id, $request->parent);
}
if(isset($id->children)) {
$new_request = new Request;
$new_request->data = json_encode($id->children);
$new_request->parent = $id->id;
$this->sortPages($new_request);
}
}
}
てみ再帰... –
はありがとうは、回答に –