php foreach循环,使用继续结果$ key始终为0

时间:2016-04-01 07:12:29

标签: php

<?php

$honorifics = array("None", "Miss", "Ms.", "Mrs.", "Mr.", " Mx", " Dr.", "Prof.", "Rabbi", "Reverend", "Imam");
?>

<?php foreach ($honorifics as $index => $honor){
        if ($index = 0) {
          continue;
        }
        echo ( $index );
}?>

打印出来

00000000

为什么?

我看到删除继续修复了问题,但那不是我想要的。我想知道出了什么问题。

如何解决?

3 个答案:

答案 0 :(得分:2)

if ($index = 0) {
    continue;
}

将0值存储到$index变量,您想要的是if ($index == 0)或更好if (!$index)

在php(以及我假设的其他语言)中,您可以在条件中设置变量数据,这通常不是您想要的应该避免的,但有时可能有用,请举例:

$len = $query->count()  // mysql query count()

if ($len) {
    // do stuff
}

// this can be shortened to

if ($len = $query->count()) {
    // do stuff if true
    echo $len;  // will echo the actual count()   
}

为了避免这样的错误,我通常会测试我的变量:

if (0 == $index)

WILL 如果你没有故意错过你的表达式会抛出错误:)但是现在,当使用像phpstorm,netbeans或其他人这样的IDE时,通常会有一个检查警告你这个声明。

修改

此处可以在PHPStorm中进行检查:

enter image description here

结果如下:

enter image description here

答案 1 :(得分:1)

您在每个循环中将0分配给$index,然后进行检查。

if ($index = 0) {

会像 -

一样工作
$index = 0;
if($index) { // if(0) {

哪个是false,哪个非常好。这就是为什么它不满足条件而$index在每个循环中打印0

应该是 -

if ($index === 0) { 

答案 2 :(得分:0)

请更改此内容:

if ($index = 0) {

到这一个:

if ($index == 0) {