php - PHP 脚本中的函数错误

标签 php mysql

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

第一:警告:为 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/

相关文章:

php - 如何在 laravel 查询构建器或 Eloquent 两个表中按 created_at 列计算行数?

mysql - 为什么 GROUP_BY 不返回所需的记录?

mysql - docker mysql-container 卷映射到项目中的文件夹 - 安全吗?

mysql - Node js : check mysql connection before a query

php - 将 RegEx 从 MySQL 提取到 PHP 中

php - Laravel - 迁移,表结构修改 - 正确方法

php - 在数学运算中使用 PHP preg_replace 匹配结果?

php - 无法将 uniqid() 值插入 MySQL 数据库

php - 推送被拒绝,未能检测到 set buildpack heroku/php

javascript - 加载更多按钮将加载更多帖子