【问题标题】:PHP first index gets treated as stringPHP第一个索引被视为字符串
【发布时间】:2018-03-29 13:30:20
【问题描述】:

我会保持简短,这是我的代码:

<?php

$arr = array(
    1,
    2,
    3,
    "x" => "aaa", 
    "y" => "bbb"
);

foreach($arr as $k => $v){

    if($k !="y" && $k != "x") {
        echo $v . " ";
    }

}

?>

结果如下:

2 3

它的行为就像这样:

$example = 0;
if ($example == 'x' || $example == 'y') {
    echo "true";
}

会回显“真实”而不是什么都没有。


基本上,我的问题是:如果 0 不等于“x”或“y”,为什么它会跳过回显数组的第一个元素?

【问题讨论】:

  • 读回来,问题的标题似乎很误导人,但我不知道标题是什么。
  • 这是!=!== 更宽松的问题,因为键的0 值。试试后者,你会得到你想要的。
  • @aynber 是的,我想是的,但在问问题之前我不确定问题出在哪里,现在我知道了,我同意你的看法

标签: php


【解决方案1】:

== 为您整理类型。

0 是一个int,所以它会将yx 转换为一个int。哪个不可解析为 1,将变为 0。字符串 '0x' 将变为 0,并匹配!

!==一起去

http://sandbox.onlinephpfunctions.com/code/bed936181e386ddfe75e4ef92771bf61ad2e7915

<?php

$arr = array(
    1,
    2,
    3,
    "x" => "aaa", 
    "y" => "bbb"
);

foreach($arr as $k => $v){

    if($k !=="y" && $k !== "x") {
        echo $v . " ";
    }

}
// result:
// 1 2 3 

source

【讨论】:

  • 0 也是一个 false-y 值。我认为它比将字母转换为 int 更多地使用它。
  • 如果我看到这个答案,我就不会回答了,谢谢@Unamata Sanatarai。很好的答案!
【解决方案2】:

这很好,我想我找到了解决方法,而不是在 if 语句的两个评估中都使用 !=,尝试使用 !== 所以,将你的 if 语句更改为:

if($k !== "y" && $k !== "x")

请参阅上面的 Unamata Sanatarai 答案,解释得很好。

【讨论】:

    猜你喜欢
    • 2023-04-07
    • 1970-01-01
    • 2020-01-08
    • 2011-05-29
    • 2016-05-17
    • 1970-01-01
    • 2010-10-27
    • 2021-10-26
    • 2017-09-21
    相关资源
    最近更新 更多