相互参照を含むデータベーステーブルから一連のIDをフェッチしようとしています。各要素の「トピック」には、同じテーブル内にある「親トピック」の列が含まれています。単一の親トピックが与えられた場合、それを親として持つすべてのサブトピックの配列を作成し、次にそれらのトピックのすべてのサブトピックなどを作成します。
これはそれほど難しいことではないようですが、独学のプログラマーとして、私はすべての間違ったツールを使用していると感じています。特にmerge-array()
とのvar_dump()
セクションは間違っていると感じており、全体的なアプローチについてはよくわかりません。これらの要素を何に置き換える必要がありますか?
function get_subtopics($parent_topic)
{
//returns an array of subtopics minus the first
$all_subs = array();
$query = $this->db->get_where('topics', array('parent_topic' => $parent_topic));
$subs = $query->result_array();
$resubs = array();
$query->free_result();
//push subs to all_subs
//while the subs array has members, find their child
while (count($subs)>0) {
foreach ($subs as $s) {
$query = $this->db->get_where('topics', array('parent_topic' => $s['id']));
$resubs = array_merge($resubs, $query->result_array());
$query->free_result();
}
$all_subs = array_merge($all_subs, $resubs);
var_dump($resubs);
}
//Returns an array of ids
return $all_subs;
}
編集:これの目的は、ランダムジェネレーターの問題が引き出されるトピックの「プール」を形成することです-私は、それらを区別するためのツリー構造なしで、すべてのサブトピックを1つの配列にまとめようとしています。「math」などの親トピックを指定するユーザーは、「algebra」、「algebra:quadratics」、「calculus」などの数学サブトピックを均等に組み合わせて、問題を引き出す必要があります。それが少し明確になることを願っています。