【问题标题】:Why in_array(1, array('1:foo')) returns TRUE? [duplicate]为什么 in_array(1, array('1:foo')) 返回 TRUE? [复制]
【发布时间】:2015-01-16 14:41:39
【问题描述】:

1 不在 array() 中,代码应返回 FALSE 而不是 TRUE。你知道为什么吗?

<?php
var_dump(in_array(1,  array('1:foo'))); // TRUE, why?
var_dump(in_array('1',  array('1:foo'))); // FALSE

【问题讨论】:

标签: php


【解决方案1】:

因为您将intstring 进行比较,并且字符串类型转换为int- 并且因为该字符串的第一个(或任何第一个字符序列)元素是一个数字,而下一个不是一部分任何 int 表示形式的 - 它更改为该元素 = 1。

http://php.net/manual/en/language.types.type-juggling.php

var_dump(in_array(1233,  array('1233:123')));   //also True

【讨论】:

    【解决方案2】:

    正如@knittl 已经说过的,这是因为类型强制。发生了什么:

    var_dump(in_array(1,  array('1:foo')));
    //PHP is going to try to cast '1:foo' to an integer, because your needle is an int.
    

    强制转换为 (int)'1:foo',结果为整数 1,所以实际上我们得到了:

    var_dump(in_array(1,  array(1))); //Which is TRUE
    

    第二个陈述是错误的。这是错误的,因为它们都是相同的类型,并且 PHP 不再尝试任何强制转换。当然,“1”与“1:foo”不同

    var_dump(in_array('1',  array('1:foo'))); //Which is FALSE
    

    【讨论】:

      猜你喜欢
      • 2019-01-09
      • 1970-01-01
      • 2014-07-03
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      • 2023-01-16
      • 1970-01-01
      • 2019-12-07
      相关资源
      最近更新 更多