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

0 html php foreach html5 notice

编辑:我在这些例子中使用wamp.

在foreach中必须有一些我没有想到的关于PHP和HTML替代语法的东西.

以下代码导致

注意:未定义的变量:第8行的index.php中的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>
Run Code Online (Sandbox Code Playgroud)

我也试过了

$array1 = ['value1', 'value2', 'value3'];
$array2 = ['value1', 'value2', 'value3'];
Run Code Online (Sandbox Code Playgroud)

这里肯定有一些非常明显的东西,我只是愚蠢.

PS我知道我可以这样做:

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

这是有效的,但我真的想了解为什么我的例子不起作用.

CBr*_*roe 6

你每个只收到一个警告,对吧?

那是因为你的循环实际上没有执行 - 因为你<?只使用了你的foreach语句,如果short_open_tags关闭了,这意味着你的循环语句根本不执行 - 所以变量不是首先设置的.但是,然后你尝试使用它们输出它们<?=,无论前面提到的设置如何都可以.

(并且在你修复之后,你仍会得到第二个循环的警告,因为在foreach你使用$array2Value大写字母的语句中V,但是在循环中$array2value使用小写字母v.)