2つのことは私に目立つ:
$i
引数と$this->downline_id_arr
の使用。 $children = array();
foreach($data as $row) {
$child_id = $row->id;
$children[$child_id] = array(/**/);
$children = array_merge($children, $this->getAllDownline($child_id);
}
return $childen;
を今、あなたは$i
変数または$this->downline_id_arr
は必要ありません:
がやって考えてみましょう。
- 各ノードを1つずつ照会しています。
ではなく、レベルによって照会考えてみましょう:
function getAllDownlines($fathers) {
$data = "SELECT * FROM users WHERE father_id IN (/*fathers*/)";
$new_father_ids = array();
$children = array();
foreach ($data as $child) {
$children[$child->id] = array(/**/); // etc
$new_father_ids[] = $child->id;
}
$children = array_merge($children, $this->getAllDownlines($new_father_ids);
return $childen;
}
一般的に以下のクエリをより速くので、あなたがより良い性能を確認する必要があります。
これはかなり標準的なアルゴリズム上の問題のようです。私たちはあなたに何をして助けることができる? – Halcyon
@Halcyon私は父親IDのすべてのダウンラインを取得するためにPHPスクリプトが必要です – Hamdy
Stackoverflowは、賃貸マンション用のサイトではありません。特定の質問がある場合は、その質問に答えることができます。 – Halcyon