PHP为什么我在数组女巫中得到0值只包含字符串

时间:2018-12-14 14:33:07

标签: php arrays

我有一个数组

$array= [
    0 => "id",
    1 => "artist",
    2 => "title"
]

但是当我使用in_array(0, $array)时 它返回true。

此外,如果我尝试使用此var_dump(array_search(0, $array)),则会得到“ int(0)”。

为什么我的数组中有0,以及如何使其以正确的方式消失?

我使用PHP 5.6

3 个答案:

答案 0 :(得分:4)

使用设置为strict的{​​{1}}参数来完成任务:

true
  

如果将第三个参数strict设置为TRUE,则array_search()函数将在干草堆中搜索相同的元素。这意味着它还将对大海捞针中的针进行严格的类型比较,并且对象必须是同一实例。 (c)http://php.net

代码:

in_array(0, $array, true);
array_search(0, $array, true);

会返回:

  

bool(false)
  bool(false)

另请参阅:
http://php.net/manual/en/function.array-search.php
http://php.net/manual/en/function.in-array.php

具有不同针头类型的其他示例:

$array = [ "id", "artist", "title", ]; var_dump(in_array(0, $array, true)); var_dump(array_search(0, $array, true));

  

array(3){
    [0] =>
    string(2)“ id”
    [1] =>
    字符串(6)“艺术家”
    [2] =>
    字符串(5)“标题”
  }

没有var_dump($array);参数

strict函数,而没有将in_array()设置为strict

代码:

true

输出:

  

bool(true)
  bool(false)
  bool(false)
  bool(false)
  bool(false)
  bool(false)

var_dump(in_array(0, $array)); var_dump(in_array(1, $array)); var_dump(in_array(154, $array)); var_dump(in_array(154.99, $array)); var_dump(in_array(null, $array)); var_dump(in_array('something', $array)); 函数,而没有将array_search()设置为strict

代码:

true

输出:

  

布尔(0)
  bool(false)
  bool(false)
  bool(false)
  bool(false)
  bool(false)

var_dump(array_search(0, $array)); var_dump(array_search(1, $array)); var_dump(array_search(154, $array)); var_dump(array_search(154.99, $array)); var_dump(array_search(null, $array)); var_dump(array_search('something', $array)); 参数设置为strict

true函数,其中in_array()设置为strict

代码:

true

输出:

  

bool(false)
  bool(false)
  bool(false)
  bool(false)
  bool(false)
  bool(false)

var_dump(in_array(0, $array, true)); var_dump(in_array(1, $array, true)); var_dump(in_array(154, $array, true)); var_dump(in_array(154.99, $array, true)); var_dump(in_array(null, $array, true)); var_dump(in_array('something', $array, true)); 函数,其中array_search()设置为strict

代码:

true

输出:

  

bool(false)
  bool(false)
  bool(false)
  bool(false)
  bool(false)
  bool(false)

答案 1 :(得分:1)

如果要检查按键,请使用array_key_exists()功能。 0是键[arra的索引。 in_array()用于检查值。示例in_array("id")

array_key_exists(0,$array)

答案 2 :(得分:0)

in_array()通常不严格检查类型,in_array(0, $array)将int与转换为int的字符串进行比较,从而将"id"变为零。您想通过传递真实值作为第三个参数来强制进行严格检查:

in_array(0, $array, true);