PHP中的多个Foreach循环

PHP中的多个Foreach循环,php,foreach,forum,Php,Foreach,Forum,您好,我正在制作一个论坛,我使用fetchAll()函数提取数据 我调用这样的函数 $forum_name = $forum->get_forum_name(); $cat_list = $forum->get_category(); <table width="100%" cellspacing="0" cellpadding="2" border="1"> <?php foreach ($forum_name as $fn) { echo '&l

您好,我正在制作一个论坛,我使用fetchAll()函数提取数据

我调用这样的函数

$forum_name = $forum->get_forum_name();
$cat_list = $forum->get_category();
<table width="100%" cellspacing="0" cellpadding="2" border="1">
<?php 

foreach ($forum_name as $fn) 
{
    echo '<tr><th>' . $fn['forum_name'] . '</th><th>Topics</th><th>Posts</th><th>Latest post</th></tr>';

    foreach ($cat_list as $cl) 
    {
        echo '<tr><td>' . $cl['cat_name'] . '</td></tr>';
    }

} 

?>
</table>
<?php

class Forum
{

protected $db;

function __construct(PDO $db)
{
    $this->db = $db;
}

// Get forum name title
public function get_forum_name()
{
    $query = $this->db->prepare("SELECT * FROM forum");
    $query->execute();

    return $query->fetchAll();
}

// FORUM CATEGORIES
// add forum category
public function add_category($cat_name, $cat_desc)
{
    $query = $this->db->prepare("INSERT INTO forum_cat (cat_name, cat_desc) VALUES (?, ?)");
    $query->bindValue(1, $cat_name);
    $query->bindValue(2, $cat_desc);

    $query->execute();
}

// list all forum categories
public function get_category()
{
    $query = $this->db->prepare("SELECT * FROM forum_cat");
    $query->execute();

    return $query->fetchAll();
}

}


?>
现在我可以这样使用它吗

$forum_name = $forum->get_forum_name();
$cat_list = $forum->get_category();
<table width="100%" cellspacing="0" cellpadding="2" border="1">
<?php 

foreach ($forum_name as $fn) 
{
    echo '<tr><th>' . $fn['forum_name'] . '</th><th>Topics</th><th>Posts</th><th>Latest post</th></tr>';

    foreach ($cat_list as $cl) 
    {
        echo '<tr><td>' . $cl['cat_name'] . '</td></tr>';
    }

} 

?>
</table>
<?php

class Forum
{

protected $db;

function __construct(PDO $db)
{
    $this->db = $db;
}

// Get forum name title
public function get_forum_name()
{
    $query = $this->db->prepare("SELECT * FROM forum");
    $query->execute();

    return $query->fetchAll();
}

// FORUM CATEGORIES
// add forum category
public function add_category($cat_name, $cat_desc)
{
    $query = $this->db->prepare("INSERT INTO forum_cat (cat_name, cat_desc) VALUES (?, ?)");
    $query->bindValue(1, $cat_name);
    $query->bindValue(2, $cat_desc);

    $query->execute();
}

// list all forum categories
public function get_category()
{
    $query = $this->db->prepare("SELECT * FROM forum_cat");
    $query->execute();

    return $query->fetchAll();
}

}


?>

下面是上面调用的PHP代码:

<?php

class Forum
{

protected $db;

function __construct(PDO $db)
{
    $this->db = $db;
}

// Get forum name title
public function get_forum_name()
{
    $query = $this->db->prepare("SELECT * FROM forum");
    $query->execute();

    return $query->fetchAll();
}

// FORUM CATEGORIES
// add forum category
public function add_category($cat_name, $cat_desc)
{
    $query = $this->db->prepare("INSERT INTO forum_cat (cat_name, cat_desc) VALUES (?, ?)");
    $query->bindValue(1, $cat_name);
    $query->bindValue(2, $cat_desc);

    $query->execute();
}

// list all forum categories
public function get_category()
{
    $query = $this->db->prepare("SELECT * FROM forum_cat");
    $query->execute();

    return $query->fetchAll();
}

}


?>


这不会给我任何错误。只需询问这样做是否会减慢脚本的速度,以及这样使用脚本是否是不好的做法。

如果需要此数据,则需要此数据,使用嵌套循环并不慢或不好。

使用两个嵌套for循环根据这些值生成表相对便宜;开销几乎不存在(假设这是获取和表示数据所需的方式)


如果
$forum\u name
$cat\u list
变得相当大,您可能会看到一些延迟,但没有很多方法可以对此进行优化。

我使用类来实现这一点

$forum_name = $forum->get_forum_name();
$cat_list = $forum->get_category();
<table width="100%" cellspacing="0" cellpadding="2" border="1">
<?php 

foreach ($forum_name as $fn) 
{
    echo '<tr><th>' . $fn['forum_name'] . '</th><th>Topics</th><th>Posts</th><th>Latest post</th></tr>';

    foreach ($cat_list as $cl) 
    {
        echo '<tr><td>' . $cl['cat_name'] . '</td></tr>';
    }

} 

?>
</table>
<?php

class Forum
{

protected $db;

function __construct(PDO $db)
{
    $this->db = $db;
}

// Get forum name title
public function get_forum_name()
{
    $query = $this->db->prepare("SELECT * FROM forum");
    $query->execute();

    return $query->fetchAll();
}

// FORUM CATEGORIES
// add forum category
public function add_category($cat_name, $cat_desc)
{
    $query = $this->db->prepare("INSERT INTO forum_cat (cat_name, cat_desc) VALUES (?, ?)");
    $query->bindValue(1, $cat_name);
    $query->bindValue(2, $cat_desc);

    $query->execute();
}

// list all forum categories
public function get_category()
{
    $query = $this->db->prepare("SELECT * FROM forum_cat");
    $query->execute();

    return $query->fetchAll();
}

}


?>


我们在
get\u-forumn\u-name
get\u-category
中看不到,但是在PHP中使用循环没有什么问题。与什么方法相反?这可能是您最不需要担心的优化问题。我看到的唯一问题是,如果这些值直接来自数据库和客户端,您可能会在某个时候成为问题的受害者。因为
$cat\u list
$forum\u name
的迭代之间不会更改,您可以计算一次
$cat_list
行,这样就不必每次都迭代它们。然而,我怀疑你的
$cat_列表
最终会改变。所以,无论何时你想要论坛名称,你都会进行查询吗?如果每个请求不止一次呢?不,我只是这样使用$example=$forum->get_forum_name();我在右图上有这样的输出。这将在每次调用数据库时查询它。哈哈,你懂你自己的剧本吗?事实上,它将获得
论坛
表中的每一个字段和每一行……在让评论家们了解数据库结构之前,我知道我需要什么,在哪里以及如何使用它。顺便说一句,这只是在乞求论坛还没有结束:)你不知道他的脚本是否容易被脚本注入。你应该删除这篇文章。如果有的话,您应该发布一个脚本的粘贴栏作为注释。这肯定不是答案。