in_array()和array_key_exists()有什么区别?

11

我在这里有疑问。实际上,in_array()array_key_exists()有什么区别?我已经试图找到答案,但仍然感到困惑。能否给我一个示例呢?

谢谢。


你是指 array_key_exists 吗? - Ismail RBOUH
当然可以,它是array_key_exists()。 - Sree devi
这些问题中你没有理解的是什么? - Narendrasingh Sisodia
我只想知道这两者之间的区别。 - Sree devi
请查看官方信息 http://php.net/manual/en/function.array-key-exists.php http://php.net/manual/en/function.in-array.php 它们都有很清晰的解释。 - Maksym Semenykhin
@Sreedevi,请检查下面的答案。标记一个更正确的。谢谢。 - user6563590
5个回答

24

in_array()array_key_exists()

区别:

  • in_array() 检查一个是否存在于数组中(检查的是值,而不是键),如果存在则返回true,否则返回false

而:

  • array_key_exists() 检查给定的索引是否存在于数组中(检查的是键,而不是值),如果存在则返回true,否则返回false

请访问手册(上面的链接)获取示例和更多信息。

一个示例链接: https://eval.in/602279

Sree devi,你已经拥有了所有的答案。请检查它们并选择最适合你的一个,标记并点赞。如果其他答案也有用,请也点赞。谢谢。 - user6563590

2
只是我个人的看法:
第一,in_array函数会在数组值中检查给定参数的存在,这意味着如果针对关联数组进行搜索,它将忽略数组键。
第二,in_array函数接受第三个参数(TRUE或FALSE,默认为FALSE)来使用严格类型比较。如果省略此参数,则会发生以下情况:
in_array(0,[false]) => true (0 is coerced to boolean for loose comparison)
in_array(1,['1 person']) => true ('1 person' is coerced as numeric until the first non numeric character)
in_array('',[null]) => true (again, string is coerced).

第三条: 您可以检查一个数组是否包含另一个数组:
in_array([1,2],[[1,2], [3,4]]) => true

第四段:

第四array_key_exists会在数组键中搜索。如果数组是非关联的,每个元素的数字索引就是其键:

array_key_exists(0,[1,2,3]) => true (there is an element at index 0)

然而,通常情况是搜索字符串键:
array_key_exists('two',['one'=>1, 'two'=>2]) => true (there is an element with key 'two')

这个比较并不是非常严格,意思是
array_key_exists(0,['0'=>1, 'two'=>2]) => true

但是这在文档中已经 解释 了。如果数组键是仅包含数字的字符串(可选地,带有小数分隔符)、布尔值或浮点数,则会将其强制转换为数字。NULL 被转换为空字符串。因此,键可能是整数或字符串。除了隐式转换之外,以下语句是错误的:
array_key_exists(1,['1 person'=>1, 'two'=>2]) => false

最后,in_array 在数组内容上执行顺序扫描,而 array_key_exists 对哈希表执行搜索。这意味着后者的性能与您搜索的数组大小无关,而 in_array 的速度与数组大小成正比。因此,如果您正在进行...
in_array('one', array_keys(['one'=>1, 'two'=>2]))

你真的真的应该在做某事。
array_key_exists('one', ['one'=>1, 'two'=>2])

1
在数组中搜索值可以使用in_array()函数,而array_key_exists()函数则用于检查键是否存在并返回结果。
$arr=["a"=>1,"b"=>2,"c"=>3,4,5,6];
// now you need to search 5 in $arr then you need to use  in_array()
// and array_key_exists() check if key exist in array 
in_array(5);  //return true
array_key_exist("a"); // return true

0
如果您想检查变量是否为数组,则可以简单地执行以下操作。
if(is_array($urarray)){}

如果你想检查一个数组是否被设置了

if(isset($urarray)){}

如果你想检查一个键是否存在,那么可以这样做:
if (array_key_exists('key',$urarray)){}

如果您想检查一个数组中是否存在某个值,请执行以下操作:
if(in_array("value", $urarray))){}

isset() - 判断一个变量是否被设置 并且不为 NULL - Maksym Semenykhin
@СеменихинМаксим 数组不也是一个变量吗?检查它是否存在有什么问题吗? - Amit Ray
它不检查变量是否存在。变量已设置且不为NULL - Maksym Semenykhin
@СеменихинМаксим,那么问题出在哪里呢?如果数组被设置了,它将返回true,否则它将返回false。而你因为这个问题而被投票降低了分数。 - Amit Ray

0

正如http://php.net/所说

array-key-exists检查数组中是否存在给定的键或索引

如果数组中设置了给定的键,则返回TRUE。 键可以是数组索引可能的任何值。

示例#1 array_key_exists() 示例

<?php
$search_array = array('first' => 1, 'second' => 4);
if (array_key_exists('first', $search_array)) {
    echo "The 'first' element is in the array";
}
?>

in-array 检查一个值是否存在于数组中

如果在数组中找到该值,则返回TRUE,否则返回FALSE。

示例#1 in_array() 示例

<?php
$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
    echo "Got Irix";
}
if (in_array("mac", $os)) {
    echo "Got mac";
}
?>

所以基本上一个函数检查给定的数组值,另一个函数检查给定的数组键是否存在

$arr = [
    `key1'=>'value1',
    'key2'=>'value2',
]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接