gpt4 book ai didi

php - 在 PHP 中使用数组而不是大量的数据库查询

转载 作者:行者123 更新时间:2023-11-29 01:45:23 26 4
gpt4 key购买 nike

我的函数看起来像那样。它有效但做了很多工作(递归调用自身并进行大量数据库查询)。必须有另一种方法来做同样的事情,但使用数组(使用一个查询)。我不知道如何修改此函数以使其与数组一起使用。

function genMenu($parent, $level, $menu, $utype) {
global $db;
$stmt=$db->prepare("select id, name FROM navigation WHERE parent = ? AND menu=? AND user_type=?") or die($db->error);
$stmt->bind_param("iii", $parent, $menu, $utype) or die($stmt->error);
$stmt->execute() or die($stmt->error);

$stmt->store_result();
/* bind variables to prepared statement */
$stmt->bind_result($id, $name) or die($stmt->error);
if ($level > 0 && $stmt->num_rows > 0) {
echo "\n<ul>\n";
}
while ($stmt->fetch()) {
echo "<li>";
echo '<a href="?page=' . $id . '">' . $name . '</a>';
//display this level's children
genMenu($id, $level+1, $menu, $utype);
echo "</li>\n\n";
}
if ($level > 0 && $stmt->num_rows > 0) {
echo "</ul>\n";
}
$stmt->close();
}

最佳答案

您可以很容易地构建一个基于树的数组,所以它是一个单一的查询,然后是一堆 PHP 逻辑来构建数组:

$tree = array();
$sql = "SELECT id, parent, name FROM menu WHERE parent ... etc.... ";
$results = mysql_query($sql) or die(mysql_error());
while(list($id, $parent, $name) = mysql_fetch_assoc($results)) {
$tree[$id] = array('name' => $name, 'children' => array(), 'parent' => $parent);
if (!array_key_exists($tree[$parent]['children'][$id])) {
$tree[$parent]['children'][$id] = $id;
}
}

为此,我假设您的树有一个顶级“0”节点。如果不是,那么您将不得不稍微调整一下。

这会给你一个双链树结构。树中的每个节点在 ['children'] 子数组中都有一个子数组列表,树中的每个节点还通过 ['parent'] 指向其父节点 属性。

给定某个起始节点,您可以像这样遍历树:

$cur_node = 57; // random number
$path = array();
do {
$parent = $tree[$cur_node]['parent'];
$path[] = $parent;
$cur_node = $parent;
} while ($parent != 0);

关于php - 在 PHP 中使用数组而不是大量的数据库查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8218155/

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