【问题标题】:Undefined variable after upgrade to PHP 5.4升级到 PHP 5.4 后未定义的变量
【发布时间】:2014-07-09 17:24:34
【问题描述】:

我无法弄清楚这个简单的代码有什么问题:

<?php    
$arr[0]['name'] = 'foo';    
?>

<? foreach ($arr as $v): ?>    
    <?=$v['name']?>    
<? endforeach; ?>

这会返回:

Notice: Undefined variable: v

有人知道这是怎么回事吗?

【问题讨论】:

    标签: php php-5.4


    【解决方案1】:

    请查看原始脚本输出(不是浏览器渲染)。很可能,您没有启用短标签,并且您的 foreach 块甚至没有运行。

    相关:PHP tags

    【讨论】:

      【解决方案2】:

      应该是:

      <?php    
      $arr[0]['name'] = 'foo';    
      ?>
      
      <?php foreach ($arr as $v): ?>    
          <?=$v['name']?>    
      <?php endforeach; ?>
      

      【讨论】:

      • 为什么投反对票?我同意答案可能值得解释,但切换到长标签是一个有效的解决方法。
      • 投反对票是因为“错误”的答案。请考虑否决投票。
      • O/P 询问“这有什么问题?”所以我更正了代码工作。
      【解决方案3】:

      您正在查看一个多维数组。

      在名称索引之前有一个零索引。在 foreach 中使用 key=>value。

      <?php    
      $arr[0]['name'] = 'foo';    
      ?>
      
      <?php foreach ($arr as $v=>$i): ?>    
          <?php echo $i['name']; ?>    
      <?php endforeach; ?>
      

      输出:

      foo
      

      【讨论】:

      • 这根本没有解决 OP 的问题。问题中的 foreach 块没有任何问题(除了其周围的短标签)。
      【解决方案4】:

      永远不要使用&lt;?,因为它已被弃用,您应该使用&lt;?php,以防&lt;?= 它会起作用,因为它是一种速记方法。 所以你应该使用:

      <?php    
      $arr[0]['name'] = 'foo';    
      ?>
      
      <?php foreach ($arr as $v): ?>    
          <?=$v['name']?>    
      <?php endforeach; ?>
      

      【讨论】:

      • 有人可以说明拒绝投票的原因吗?
      • 我没有否决你,但可能是因为短标签并未真正被弃用?
      猜你喜欢
      • 1970-01-01
      • 2017-06-10
      • 2014-08-17
      • 2016-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多