PHP&;foreach的HTML替代语法:未定义的变量


PHP & HTML Alternate syntax for foreach: Undefined variable

编辑:我在这些示例中使用wamp。

关于PHP&foreach中的HTML替代语法。

以下代码导致

注意:未定义的变量:index.php中第8行的array1Value

注意:未定义的变量:第12行index.php中的array2Value

1: <?php
2: $array1 = getArray1(); // Returns an array with values
3: $array2 = getArray2(); // Also returns an array with values
4: ?>
5:
6:    <div class="doNotRemoveDiv">
7:        <? foreach($array1 as $array1Value): ?>
8:            <?= $array1Value ?>
9:        <? endforeach; ?>
10:
11:       <? foreach($array2 as $array2Value): ?>
12:           <?= $array2Value ?>
13:       <? endforeach; ?>
14:   </div>

我也试过

$array1 = ['value1', 'value2', 'value3'];
$array2 = ['value1', 'value2', 'value3'];

这里一定有一些非常明显的东西,而我只是个傻瓜。

附言:我知道我可以这样做:

6:    <div class="doNotRemoveDiv">
7:        <?php foreach($array1 as $array1Value) {
8:            echo $array1Value;
9:        } ?>
10:   </div>

这是有效的,但我真的想明白为什么我的例子不起作用。

您每个只收到一个警告,对吗?

这是因为你的循环实际上并没有执行——因为你只在foreach语句上使用了<?,如果short_open_tags关闭,那意味着你的循环语句根本没有执行——所以变量一开始就没有设置。但是,然后您尝试使用<?=输出它们,不管前面提到的设置如何,这都可以工作。

(修复后,您的第二个循环仍然会收到警告,因为在foreach语句中,您使用了带有大写V$array2Value,但在循环中使用了带有小写v$array2value。)

您必须启用short_open_tag配置值才能使用短标记<?而不是<?php。从PHP 5.4.0开始,您可以使用<?=而无需启用此指令