这里的代码非常简单,所以我不确定会发生什么。我几年前制作的这个网站一直运行良好,今天我随机检查了一下,发现它完全无聊。我不确定是我的虚拟主机执行的 PHP 升级还是自动 WordPress 更新破坏了它,但无论如何,代码的行为不符合预期。
在WordPress循环中,对于每个帖子,此代码正在运行:
$stats = array(
'recon' => 'Recon',
'inf' => 'Infantry',
'fist' => 'Fire Support',
'atgm' => 'ATGM',
'armor' => 'Armor',
'arty' => 'Artillery',
'aa' => 'Anti-Air',
'air' => 'Aircraft',
'heli' => 'Helicopters'
);
foreach( $stats as $stat_name ):
$stat_key = key( $stats );
// DEBUG:
echo '<p>' . $stat_key . ' : ' . $stat_name . '</p>';
...
next( $stats );
endforeach;
正如您在实时站点上看到的那样,key( $stats )
返回数组中下一项而不是当前项的键,并为数组中的最后一项返回 null。这里可能出现什么问题?
只需使用foreach中的键选项
foreach( $stats as $key => $stat_name ):
// DEBUG:
echo '<p>' . $stat_key . ' : ' . $stat_name . '</p>';
endforeach;
我不建议调用,接下来在foreach循环中,它将为您进行迭代。 当您调用 key 时,它可能已经这样做了,因为它已经将指针移到了下一项。
当你弄乱数组的结构时,Foreach 可以做一些奇怪的事情,因为它创建了数组的卷影副本(我忘记了它的确切解释方式,他们可能在 7 中对其进行了一些更改(。 无论如何,我不确定接下来调用会产生什么影响,也许没有,因为它处理 foreach 迭代的方式。 我从来没有尝试过!
如果要使用 next,请使用 do
或 while
循环。
真正正确的语法是
foreach( $stats as $key => $stat_name ){
// DEBUG:
echo '<p>' . $stat_key . ' : ' . $stat_name . '</p>';
}
替代语法在 html 中很有用,例如
<?php foreach( $stats as $key => $stat_name ): ?>
<p><?=$stat_key;?> : <?=$stat_name;?></p>
<?php endforeach; ?>
<div> ....
这是因为endforeach;
比}
更具描述性,并且当与HTML和其他控制结构(如if语句(混合时,很容易丢失对}
的跟踪。 使用替代语句,您最终会得到诸如endforeach;
endif;
而不是} }
之类的东西。 希望这是有道理的。