gpt4 book ai didi

php - PHP 脚本中的函数错误

转载 作者:行者123 更新时间:2023-11-29 08:05:18 24 4
gpt4 key购买 nike

我一直在研究某人给我的一个非常酷的脚本,试图将其适应我的网站。我越来越接近了,但我仍然遇到两个让我困惑的错误。

第一:警告:为 foreach() 提供的参数无效...

这是 foreach 语句:

foreach ($Topic as $Topics)

它遵循一个函数:

function generate_menu_items($PopTax, $Topics, $Current_Topic)

我认为问题与函数中的中间值 - $Topics 有关。我不明白它是如何衍生的。我的猜测是它应该是所有可能主题的数组(由我的数据库中的 $MyTopic 表示)。但我对函数不太熟悉,也不明白为什么他把函数和foreach放在数据库查询之前。 (但是,有一个更通用的数据库查询可以在食物链的更高位置建立其中一些值。)

这是第二个问题: fatal error :调用未定义的函数 render_menu()...

谁能告诉我应该如何以及在哪里定义这个函数?

<小时/>

让我简要解释一下这个脚本的全部内容。首先想象一下这些 URL:

MySite/主题/动物我的网站/主题/动物之家我的网站/主题/动物生态学MySite/主题/哺乳动物生态学我的网站/主题/鸟类生态学

两个键值与每个 URL 关联 - $PopTax(通俗名称)和 $MyTopic。对于前三个 URL,$PopTax = Animal,而另外两个是 Mammal 和 Bird。 $MyTopic = 最后三行的生态。对于前两个,$MyTopics = 简介和主页。

这两个值(Tax_ID 和 Topic_ID)的 ID 只是名称的前三个字母(例如 Mam = 哺乳动物,Eco = 生态学)。此外,生命是动物的 parent ,动物是脊椎动物的 parent ,脊椎动物是哺乳动物的 parent 。

现在我只是想把它们整合在一起,在侧边栏中创建一个小索引。因此,如果您访问 MySite/topics/animal-ecology,您会在侧边栏中看到所有动物主题的列表...

<a href="/topic/animal" title="Animals">Animals</a>
<a href="/topic/animal-classification" title="Animal Classification">Animal Classification</a>
<a href="/topic/animal-homes" title="Animal Homes">Animal Homes</a>
<a href="/topic/animal-ecology" title="Animal Ecology">Animal Ecology</a>

正如您所看到的,存在一些大小写和复数差异(动物与动物),尽管我认为这与我遇到的问题并不真正相关。

但我不确定我的代码是否只需要调整,或者是否有一些奇怪的错误。我觉得有些事情不太对劲。感谢您的任何提示。

<小时/>
$Tax_ID = 'Mam'; // Mam represents Mammal
$Current_Topic = 'Homes';

function generate_menu_items($PopTax, $Topics, $Current_Topic)
{
$menu_items = array();

foreach ($Topic as $Topics)
{
$url = "/topics/$PopTax[PopTax]-$Topic[MyTopic]";
$title = "$PopTax[PopTax] $Topic[MyTopic]";
$text = $Topic['MyTopic'];

if ($Topic === 'People') {
$url = "$PopTax[PopTax]-and-$Topic[MyTopic]";
$title = "$PopTax[PopTax] and $Topic[MyTopic]";
$text = "$PopTax[PopTax] &amp; $Topic[MyTopic]";
}

if ($Topic === 'Movement' && $PopTax['Parent'] == 'Ver' && $PopTax['PopTax'] != 'Human') {
$url = "$PopTax[PopTax]-locomotion";
$title = "$PopTax[PopTax] Locomotion";
$text = "Locomotion";
}

$menu_items[] = array(
'url' => strtolower($url),
'title' => ucwords($title),
'text' => ucfirst($text),
'active' => ($Topic['MyTopic'] === $Current_Topic)
);
}

return $menu_items;
}

function generate_menu_html($menu_items)
{
$list_items = array();

foreach ($menu_items as $item)
{
if ($item['active']) {
$list_items[] = "<li><span class=\"active\">$item[text]</b></span></li>";
} else {
$list_items[] = "<li><a href=\"$item[url]\" title=\"$item[title]\">$item[text]</a></li>";
}

}

return '<ol>' . implode("\n", $list_items) . '</ol>';
}

$stm = $pdo->prepare("SELECT T.Topic_ID, T.MyTopic
FROM gz_topics T
JOIN gz_topics_poptax TP ON TP.Topic_ID = T.Topic_ID
WHERE TP.Tax_ID = :Tax_ID");

$stm->execute(array('Tax_ID' => $Tax_ID));
// Fetch all rows (topics) as an associative array
$Topics = $stm->fetchAll(PDO::FETCH_ASSOC);

// Get the DB row for the taxon we're dealing with
$stm = $pdo->prepare("SELECT Tax.ID, Tax.PopTax, Tax.Parent
FROM gz_poptax Tax
WHERE Tax.ID = :Tax_ID");

$stm->execute(array('Tax_ID' => $Tax_ID));
// Fetch a single row, as the query should only return one row anyway
$PopTax = $stm->fetch(PDO::FETCH_ASSOC);

// Call our custom functions to generate the menu items, and render them as a HTML list
$menu_items = generate_menu_items($PopTax, $Topics, $Current_Topic);
$menu_html = render_menu($menu_items);

// Output the list to screen
echo $menu_html;

最佳答案

您需要foreach ($Topics as $Topic)。您循环遍历 $Topics 中的每个 $Topic 是另一种思考方式。

关于php - PHP 脚本中的函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22850449/

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