[英]Checking if value exists in array with array_search()
如果0
可能是从array_search()
返回的可能键,那么使用此 function(或任何 php function;如果有更好的方法,请分享)测试数组中是否存在元素的最佳方法是什么?
我试图这样做:
if(array_search($needle, $haystack)) //...
但如果$needle
是数组中的第一个元素,那当然会返回false
。 我想我想问的是,我可以在这个if
语句中做一些技巧来让它表现得像我想要的那样吗? 我试过这样做,但没有一个奏效:
$arr = array(3,4,5,6,7);
if(array_search(3, $arr) != false) //...
if(array_search(3, $arr) >= 0) //...
感谢帮助。
这是方法:
if(array_search(3, $arr) !== false)
请注意===
PHP 运算符的使用,称为相同(在本例中不相同)。 您可以在官方文档中阅读更多信息。 您需要使用它,因为通过使用相等运算符,您无法区分 0 和 false(或 null 或 '' )。
如果您找到匹配项并想使用整数值,则更好的解决方案是:
if (($pos = array_search(3, $arr)) !== false)
{
// do stuff using $pos
}
作为===
和!==
的替代方法,您还可以使用in_array
:
if (in_array($needle, $haystack))
作为===
、 !==
和in_array()
的替代方法,您可以使用array_flip()
:
$arr = [3,4,5,6,7];
$rra = array_flip($arr);
if( $rra[3] !== null ):
var_dump('Do something, '.$rra[3].' exists!');
endif;
这不少于接受的答案。 但它确实允许您以一种非常易于阅读的方式获得 position 和存在。
我们想知道 int 3 是否在$arr
中,即原始数组:
array (size=5)
0 => int 3
1 => int 4
2 => int 5
3 => int 6
4 => int 7
array_flip 使用交换的键值对创建一个新数组 ( $rra
):
array (size=5)
3 => int 0
4 => int 1
5 => int 2
6 => int 3
7 => int 4
现在我们可以通过array_key_exists,
isset , or by enclosing
$rra[3]` 包含在 if 语句中来验证 int 3 的存在,它将(或不会成为) $rra
中的键。
由于我们要查找的值的数组键 id 可能为0
,因此我们需要与null
进行比较,而不是依赖于将0
评估为false
。
如果是用例,您还可以更改原始数组,因为如果$rra[3]
不是null
, $rra[3]
将返回什么是键(位置0
,在这种情况下)原始数组中的值。
if ( $rra[3] !== null ):
// evaluates to: unset( $array[0] );
unset( $arr[ $rra[3] ] );
endif;
如果您使用的是关联数组,此操作同样有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.