【问题标题】:Foreach giving undefined variable errorForeach 给出未定义的变量错误
【发布时间】:2013-04-30 23:23:30
【问题描述】:

请记住,我来晚了,所以这可能只是一个我忽略的非常简单的解决方案。

我有这个 foreach 语句:

  <? foreach ($entrees as $entree) { ?>
       <li>
           <span class="food-name">
               <?=$entree['name']?>
           </span>
       </li>
  <?}?>

这为 $entree 提供了一个未定义的变量错误。

 A PHP Error was encountered

 Severity: Notice

 Message: Undefined variable: entree

 Filename: views/welcome_message.php

 Line Number: 9

我试过print_r($entrees);,结果是

 Array ( [0] => Array ( [name] => Lamb [description] => A small leg of lamb ) [1] => Array ( [name] => Ham [description] => Large thing of ham ) ) 1

再一次,这可能是一些愚蠢的简单但我一直在尝试 30 分钟并且无法让它为我的生活工作。在此先感谢您的帮助。

【问题讨论】:

  • 您可能也想将其标记为 PHP。
  • 是的,哎呀。告诉你我累了。
  • 通常如果 $entree 未定义,则 $entrees 不是数组
  • 发布错误信息

标签: php arrays variables foreach undefined


【解决方案1】:

您需要检查条目名称是否设置在您的多维数组中。这是长版本,因为我不知道 PHP 中的 short_open_tags 选项。

代码

<?
$entrees = array();
$entrees[0]['name']="Lamb";
$entrees[0]['description'] ="A small leg of lamb";
$entrees[1]['name']="Ham";
$entrees[1]['description'] ="Large thing of ham";

echo "<ul>\n";
foreach ($entrees as $entree) { 
 if(!empty($entree['name'])){
   echo "<li>";
   echo "<span class=\"food-name\">";
   echo $entree['name'];
   echo "</span>";
   echo "</li>\n";
 }
}
echo "</ul>";

?>

输出

<ul>
<li><span class="food-name">Lamb</span></li>
<li><span class="food-name">Ham</span></li>
</ul>

更新 多亏了@Arjan,您学到了一些新东西 - 您使用 [short_open_tags][1] 拥有的原始代码也应该适用于 if 语句,前提是它们在您的构建中启用。在我的测试中,他们抛出了一个错误,因为我的测试机器使用的是旧版本的 PHP。重建后,它们默认工作。

<?=$entree['name']?>

根据此用法中的manual= 符号表示echo(),在 PHP 5.4.1 中默认启用。在通过谷歌搜索时,因为他们的搜索使用不同的运算符,我无法找到链接,因为我不知道使用的名称。如果您正在与开发人员团队一起编程,请确保使用与团队其他成员一致的标签样式。

【讨论】:

  • 它有点工作。它重复第一个结果。这是什么tArr?在谷歌上找不到。
  • 只是临时数组的占位符缩写。我们将键分配给$entree,将与$key 关联的值数组分配给$tArr
  • 呃,我已经更新了我的代码。你应该更容易理解,因为这是你习惯的风格。
  • 我只是将变量重命名为测试。复制了错误的错误信息。
  • 其实&lt;?=$foo;?&gt;&lt;?php echo $foo; ?&gt;如果启用short_open_tags是一样的。
【解决方案2】:

像..一样使用

   <?   
     if(isset($entrees)) {
     foreach ($entrees as $entree) { ?>
   <li>
       <span class="food-name">
           <?=$entree['name']?>
       </span>
   </li>
      <?} } 
       else { echo 'Any thing You want';
      }
     ?>

【讨论】:

    【解决方案3】:

    试试这个

    <?php 
       if(isset($entrees) && $entrees != NULL){
          foreach($entrees as $entree => $arrData){?>
            <li>
              <span class="food-name">
                <?php echo $arrData['name'] ?>
              </span>
            </li>         
         <?}
       }?>
    

    【讨论】:

      【解决方案4】:

      您需要在 php.ini 中将short_open_tag 设置为On。这为我修复了它,无需额外的代码。

      【讨论】:

      • 天啊,这个确切的问题让我措手不及。谢谢你的提示! (即使你发布它已经 4 年了)。对于其他 googlers:此解决方案的替代方法是在您的代码中将实际的短开放标签 (&lt;?) 替换为普通标签 (&lt;?php)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-06
      • 2019-05-08
      • 2019-09-19
      • 2014-08-15
      • 1970-01-01
      • 1970-01-01
      • 2020-02-28
      相关资源
      最近更新 更多