gpt4 book ai didi

mysql - 在codeigniter中增加子元素数据库获取

转载 作者:行者123 更新时间:2023-11-29 14:07:20 26 4
gpt4 key购买 nike

我正在尝试从包含交叉引用的数据库表中获取一系列 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;
}

编辑:这样做的目的是形成一个主题“池”,从中为随机生成器抽取问题 - 我试图将所有子主题放入一个数组中,没有树结构来区分它们。指定父主题(例如“数学”)的用户应该获得数学子主题的均匀组合,例如“代数”、“代数:二次方程”或“微积分”,从中得出问题。希望能澄清一点。

最佳答案

有两种方法可以做到这一点,要么只是从数据库中获取所有记录,然后使用如下所示的 php 递归函数构建树结构。

//Build menu array containing links and subs
$items = Array(
//highest level
'cms' => Array(
'title' => 'CMS',
//Array containing submenu items for cms
'subs' => Array(
'intro-to-cms' => Array('title' => 'Intro to CMS'),
'specific-cms' => Array('title' => 'Specific CMS'),
'installing-a-cms' => Array('title' => 'Installing a CMS')
),
)
);

//Display the menu
echo navlinks($items, $page);

/**
* Recursive function creates a navigation out of an array with n level children
* @param type $items
* @return string containing treestructure
*/
function navlinks($items, $page=false)
{
$html = '<ul>';
foreach ($items AS $uri => $info) {
//Check if the pagename is the same as the link name and set it to current when it is
$html .= '<li'.($info['title'] == $page ? ' class="current"' : '').'>';
echo ' <a href="' . $uri . '">' . $info['title'] . '</a>';
//If the link has a sub array, recurse this function to build another list in this listitem
if (isset($info['subs']) && is_array($info['subs'])) {
$html .= navlinks($info['subs']);
}
$html .= '</li>';
}
$html .= '</ul>';
return $html;
}

为了仅过滤 1 个父级及其底层子级,您将需要提前进行相当棘手的查询,如之前关于 stackoverflow 的评论中所解释的那样。 (链接如下)

MySQL parent -> child query

关于mysql - 在codeigniter中增加子元素数据库获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14162564/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com