我有一個以下結構的陣列,我想將元素從根級別獲取到第 3 級別
Array
(
[0] => Array
(
[id] => 1
[parent_id] =>
[name] => try
[sub_categories] => Array
(
[0] => Array
(
[id] => 2
[parent_id] => 1
[name] => try1
[sub_categories] => Array
(
[0] => Array
(
[id] => 3
[parent_id] => 2
[name] => try2
[sub_categories] => Array
(
[0] => Array
(
[id] => 4
[parent_id] => 3
[name] => try3
[sub_categories] => Array
(
[0] => Array
(
[id] => 5
[parent_id] => 4
[name] => try4
)
)
)
)
)
)
)
)
(
[1] => Array
(
[id] => 6
[parent_id] => 1
[name] => try1
[sub_categories] => Array
(
[0] => Array
(
[id] => 7
[parent_id] => 6
[name] => try2
[sub_categories] => Array
(
[0] => Array
(
[id] => 8
[parent_id] => 7
[name] => try3
[sub_categories] => Array
(
[0] => Array
(
[id] => 9
[parent_id] => 8
[name] => try4
)
)
)
)
)
)
)
)
)
)
public function getElements( $parent_id = NULL, $level = 0 ) {
$data = models\Categories::find()->where( ['parent_id'=>$parent_id] )->all();
$arr = array();
foreach( $data as $data ) {
if( $level == 3 ) {
break;
}
//do something
$countChilds = models\Categories::find()->where( ['parent_id'=>$data->id] )->count();
if( $countChilds > 0 ){
$catData['sub_categories'] = $this->getElements( $parent_id = $data->id, $level );
}
$arr[] = $catData;
}
return $arr;
}
我試圖添加一個計數器并在計數器達到 3 時跳出回圈但它不起作用,所以我認為因為計數器只能在根類別旁邊的直接子類別上作業,因為我想沿著樹 3 層向下走,這樣計數器就不起作用了,實作此目的的最佳方法是什么我希望我的結果陣列輸出 ID 為 1,2,3,4,6,7,8 的陣列。不應列印 ID 為 5,9 的元素,因為它們屬于級別 4
對此的任何幫助將不勝感激
uj5u.com熱心網友回復:
<?php
public function getElements( $parent_id = NULL, $level = 0 ) {
if( $level == 3 ) return []; // or return $arr;
$data = models\Categories::find()->where( ['parent_id'=>$parent_id] )->all();
$arr = array();
foreach( $data as $data ) {
//do something
$countChilds = models\Categories::find()->where( ['parent_id'=>$data->id] )->count();
if( $countChilds > 0 ){
$catData['sub_categories'] = $this->getElements( $parent_id = $data->id, $level 1);
}
$arr[] = $catData;
}
return $arr;
}
在上面的代碼中,我進行了 2 處更改。
- 如果
$level == 3,則立即回傳。不需要把它放在 foreach 中。 - 它應該是
$catData['sub_categories'] = $this->getElements( $parent_id = $data->id, $level 1);而不是$level,因為子級將具有父級 1 并且后增量運算子不會這樣做。此外,即使$level(預增量操作)也不是一個好主意,因為您甚至正在為 foreach 回圈中的下一個即將到來的條目修改變數。所以,$level 1是正確的方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/383340.html
上一篇:迭代牛頓的遞回方法(Java)
下一篇:遞回遍歷家譜時遇到問題
