gpt4 book ai didi

php - 从数据库中获取带有子项的项并显示它们的良好实践方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:48:27 26 4
gpt4 key购买 nike

我有一个项目列表。每个项目都有子列表。这有点像 StackOverflow 上的答案,其中每个答案都有一个 0-n 子评论列表。

我正在使用 PHP 脚本,我能够在一个查询中查询所有评论和子评论,但很难组织数据以正确显示。

我遇到的困难是获取所有主要评论,然后汇总它们下的所有子评论,然后动态确定何时放置表单以添加额外的子评论。

知道如何以或多或少优雅或良好实践的方式做到这一点吗?

谢谢!!

最佳答案

如果每个项目都有 parent_id,那么引用就很容易了

我的代码中的示例

/**
* array for storing data
*
* @var array
*/
private $tree = array();
/**
* html - output of current module
*
* @var string
*/
private $output = '';

/**
* Retreives data from table items.
*
* @return void
*/
private function _getData()
{
$pdo = App_Registry::get('pdo');
$levels = array();
foreach ($pdo->query('SELECT * FROM sellers ORDER BY parent_id ASC',PDO::FETCH_OBJ) as $k=>$v){
//tree with references references
$current = &$levels[ $v->id ] ;
$current['parent_id'] = $v->parent_id;
$current['name'] = $v->name;
if (0 == $v->parent_id){
$this->tree[ $v->id ] = &$current;
} else {
$levels[$v->parent_id ]['children'][$v->id] = &$current;
}
}
}

/*
*App_AbstractModule::preRender overriding
* @return void
*/
protected function preRender()
{
$this->_getData();
}
/**
* recursively build html output.
*
* @return string
*/
private function _render($arr)
{
$this->output.= '<ul>';
foreach ($arr as $k=>$v)
{
$this->output.= '<li>'.$v['name'].'</li>';
if( !empty($v['children'])){
$this->_render($v['children']);
}
}
$this->output.= '</ul>';
return $this->output;
}
/*
*App_AbstractModule::render overriding
* @return string
*/
protected function render()
{
return $this->_render($this->tree);
}

表格的下一个方向

   id   parent_id   name
1 0 Dave Brubeck
2 0 Ahmad Jamal
3 0 Art Blacky
4 0 Roy Hargrov
5 2 Miles Davis
6 1 Richie Cole
7 2 Dizzy Gillespie
8 5 Joshua Redman
9 1 Michel Petrucciani

关于php - 从数据库中获取带有子项的项并显示它们的良好实践方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8944910/

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