PHP key() 返回数组中下一项的键,而不是当前项

  • 本文关键字:一项 数组 返回 PHP key php
  • 更新时间 :
  • 英文 :


这里的代码非常简单,所以我不确定会发生什么。我几年前制作的这个网站一直运行良好,今天我随机检查了一下,发现它完全无聊。我不确定是我的虚拟主机执行的 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,请使用 dowhile 循环。

真正正确的语法是

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;而不是} }之类的东西。 希望这是有道理的。

最新更新