【问题标题】:FOR output does not start with 0 element of array in phpFOR输出不是以php中数组的0元素开头
【发布时间】:2013-10-13 12:46:05
【问题描述】:

我在将第 0 个数组元素作为 FOR 循环的输出时遇到问题。我希望服务器打印字母 A B C D E;如果某些东西与数组中的元素不同,则应该打印其他东西。所以我为此制定了条件和 switch 语句。

但是数组的第 0 个元素总是作为不同的元素打印出来。我不知道我做错了什么。你能帮我么?你能解释一下为什么会这样吗?

<?php
    $array = array(0,1,2,3,4,"something");
    for($i=0;$i<count($array);$i++){
        echo '<br>'.$i;
        if ($array[$i] == 'something') {
            echo ' something ';
        } else {
            switch ($array[$i])
                {   case "0":
                        echo ' A';
                        break;
                    case "1":
                        echo ' B';
                        break;
                    case "2":
                        echo ' C';
                        break;
                    case "3":
                        echo ' D';
                        break;
                    case "4":
                        echo ' E';
                        break;
                    default:;
                };
            };
        };
    ?>

我的输出是这样的:

0 something 
1 B
2 C
3 D
4 E
5 something

但我期待这个:

0 A 
1 B
2 C
3 D
4 E
5 something

【问题讨论】:

  • 尝试在循环之前添加reset($array)
  • PHP 中的大多数字符串都等于0,使用=== 来阻止它。您可以使用 var_dump(0 == "hello"); 自行测试
  • 你先尝试0 == 'something'了吗?
  • @SmokeyPHP - 谢谢,现在可以正常工作了 :)

标签: php arrays if-statement for-loop


【解决方案1】:

当比较整数 0 和字符串 "something" 时,字符串被转换为整数。见:

var_dump((int) 0); // yields int 0
var_dump((int) 'something'); // yields int 0

PHP bug request 39579。请注意,这不是错误,并且按“预期”工作。

正确的比较应该使用严格相等(三个等号同时测试类型):

if ($array[$i] === 'something') {
    echo ' something ';
}

或者,您可以在比较期间暂时强制转换“已知/假定”类型,并且仍然保持松散的相等性:

if ((string) $array[$i] == 'something') {
    echo ' something ';
}

// OR with strval

if (strval($array[$i]) == 'something') {
    echo ' something ';
}

【讨论】:

  • 谢谢你更深入的解释。我会看看。 === 完美运行
  • 已接受但无法投票,抱歉,我没有此操作的声誉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-13
  • 2017-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多