【问题标题】:Getting variable from results array, why can I not get more then 1从结果数组中获取变量,为什么我不能得到超过 1
【发布时间】:2013-12-07 13:41:01
【问题描述】:

好的,我的问题如下,基本上我要做的是构建 href 并将类别主题名称放入 <h2>...</h2> 到目前为止,我只能使用 $key 变量放置类别名称,但不能对我的其他变量(例如$category_topic['category_folder']$category_topic['category_page'])执行相同操作。

需要帮助!

while ($category_topic = $resc -> fetch()){ 
    $result[$category_topic['category_name']][] = $category_topic;
}
foreach ($result as $key => $value){
    $category_topic_name = str_replace("&", "and", $key);
    $category_topic_url = DST.$category_topic['category_folder'].DS.$category_topic['category_page'];
print <<<END
<div class="by_cat">
<h2 class="h_unln"><a class="more_templ" href="$category_topic_url">$category_topic_name</a></h2>
<ul class="cat_tmp_list">
END;

添加print_r($category_topic); 后,我得到以下内容

Array
(
    [1] => Array
        (
            [0] => Array
                (
                    [category_name] => Category Name
                    [0] => Category Name
                    [category_folder] => Category Folder
                    [1] => Category Folder
                    [category_page] => Category Page
                    [2] => Category Page
                )
            [1] => Array
                (
                    [category_name] => Category Name
                    [0] => Category Name
                    [category_folder] => Category Folder
                    [1] => Category Folder
                    [category_page] => Category Page
                    [2] => Category Page
                )
         )
  )

但是如何将结果写入变量我不知道。

请,请,请帮忙。

【问题讨论】:

  • 让 print_r($category_topic) 在你的 while 循环中
  • 嗯,将其添加为链接 $category_name[2]
  • @Mihai,我应该在哪里以及如何添加它,你能解释一下吗?
  • @AlexB 只需使用 $category_topic[2] 而不是 $category_topic_name 克隆heredoc
  • @Mihai 我已经添加了,工作方式很奇怪,所以现在第一个循环的标签变成了第二个出现的标签,然后第二个是第三个等等,由于某种原因,第一个空空如也?知道为什么会这样吗?

标签: php mysql arrays variables foreach


【解决方案1】:

因为您正在查看 $category_topic,所以这是您在 while 循环中给出的名称。该变量将等于该循环的最后一次迭代。

您的 foreach 循环应如下所示:

foreach ($result as $key => $value){
    $category_topic_name = str_replace("&", "and", $key);
    $category_topic_url = DST.$value['category_folder'].DS.$value['category_page'];
print <<<END
<div class="by_cat">
<h2 class="h_unln"><a class="more_templ" href="{$category_topic_url}">{$category_topic_name}</a></h2>
<ul class="cat_tmp_list">
END;

请注意我如何将 $categoryValue 更改为 $value,因为在您的 foreach 循环中,您将每次迭代分配给 $key=>$value,因此每个循环的数组都存储在 $value

即,如果您说foreach ($result as $foo =&gt; $bar),您将使用$bar

希望这会有所帮助!

【讨论】:

  • 感谢您的回答,但问题是 $category_topic_url 中的两个值都返回为空,不知道发生了什么。
  • 抱歉,完全错过了...您需要使用 heredoc 将变量包装在 {} 中。
  • DS 是正斜杠“/”,DST 是目标目录,如“文件夹/”
  • 不行,还是什么都不做,你想看的页面可能是?
  • 确保您已将 url 变量更改为我的答案中使用的变量 :)
【解决方案2】:

好的,所以我现在已经想通了,这是我的答案。

在我的第一种方法中,我只访问了另一个数组的第一个数组值(对象)。所以为了访问第二个数组“子数组”,我添加了另一个foreach,所以我的整个语句现在看起来像下面这样,最重要的是一切正常。

foreach ($result as $key => $value){
    foreach ($value as $k2 => $v2){
    $category_topic_name = str_replace("&", "and", $v2['category_name']);
    $category_topic_url = DST.$v2['category_folder'].DS.$v2['category_page'];
    }
print <<<END
<div class="by_cat">
<h2 class="h_unln"><a class="more_templ" href="{$category_topic_url}">{$category_topic_name}</a></h2>
<ul class="cat_tmp_list">
END;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多