繁体   English   中英

使用 array_search() 检查数组中是否存在值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM