我一直在与一个人给我的非常酷的剧本进行摔跤,试图让它适应我的网站。我越来越近了,但我仍然遇到两个令我困惑的错误。
首先:警告:为foreach()提供的参数无效 ...
这是foreach声明:
foreach ($Topic as $Topics)
它遵循一个功能:
function generate_menu_items($PopTax, $Topics, $Current_Topic)
我认为问题与函数中的中间值有关 - $ Topics。我不明白它是如何衍生出来的。我的猜测是它应该是所有可能主题的数组(在我的数据库中由$ MyTopic表示)。但是我并不熟悉函数,我不明白为什么在数据库查询之前将函数和foreach放在一起。 (但是,有一个更通用的数据库查询,它在食物链的上方建立了一些这些值。)
这是第二个问题:致命错误:调用未定义的函数render_menu() ...
有谁能告诉我应该如何以及在哪里定义这个功能?
让我简要解释一下这个剧本的全部内容。首先想象一下这些网址:
的MySite /主题/动物 mysite的/主题/动物的家园 mysite的/主题/动物生态学 mysite的/主题/哺乳动物生态学 的MySite /主题/鸟生态学
两个键值与每个URL相关联 - $ PopTax(流行名称)和$ MyTopic。对于前三个URL,$ PopTax = Animal,而另外两个是Mammal和Bird。 $ MyTopic =最后三行的生态学。对于前两个,$ MyTopics = Introduction and Homes。
两个值(Tax_ID和Topic_ID)的ID都只是名称的前三个字母(例如Mam = Mammal,Eco = Ecology)。此外,Life是动物的父母,它是脊椎动物的父母,它是哺乳动物的父母。
现在我只想把它们全部拉到一起,在侧边栏中创建一个小索引。因此,如果您访问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] & $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;
答案 0 :(得分:2)
你想要foreach ($Topics as $Topic)
。您在$Topic
中循环遍历每个$Topics
是另一种思考它的方式。