数组里面搜索

一、搜索数组的key是否存在

  1. array_key_exists
    array_key_exists() 在给定的 key 存在于数组中时返回 TRUE。key 可以是任何能作为数组索引的值。array_key_exists() 也可用于对象。
$array1 = array('first' => 1, 'second' => 4);
$array2 = array('first' => null, 'second' => 4);
$array3 = array('first' => 0, 'second' => 4);
$array4 = array('first' => false, 'second' => 4);
$array5 = array('second' => 4);
dump(array_key_exists('first',$array1));//true
dump(array_key_exists('first',$array2));//true
dump(array_key_exists('first',$array3));//true
dump(array_key_exists('first',$array4));//true
dump(array_key_exists('first',$array5));//false

在这里插入图片描述
由此可见只需要array1存在你要搜索的key,不管这个key的值是null、0、false 他都会返回true

  1. key_exists
    key_exists 是array_key_exists的别名

二、搜索数组的值是否存在

  1. array_search
    array_search — 在数组中搜索给定的值,如果成功则返回相应的键名
$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');
dump(array_search('green', $array)); // $key = 2;
dump(array_search('red', $array));   // $key = 1;有多个值时返回第一个的key
dump(array_search('pink', $array));   // false

在这里插入图片描述
存在就返回该值的key
但是这个函数有一个bug,当被搜索的数组含有一个值等于0时,即使你要搜索的值不存在,他也会返回true

$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red' ,4 => 0);
dump(array_search('green', $array)); // $key = 2;
dump(array_search('red', $array));   // $key = 1;有多个值时返回第一个的key
dump(array_search('pink', $array));   // $key = 4;

在这里插入图片描述
使用这个函数来搜索时,你得保证被搜索的数组的值不能等于0才行,等于false、null都是可以的,测试时候就0是一个另类
解决这个bug,你可以在搜索之前foreach 一遍,先把值等于0的去掉!

$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red' , 4 => false, 5 => null, 6 => 0, 7 => '0');
foreach ($array as $key => $value){
    if($value === 0){
        unset($array[$key]);
    }
}
dump($array);
dump(array_search('green', $array)); // $key = 2;
dump(array_search('red', $array));   // $key = 1;有多个值时返回第一个的key
dump(array_search('pink', $array));   // false

在这里插入图片描述
每次查找的时候都要foreach一遍,那就很麻烦了,还是需要官方早点解决这个bug吧,或者自己重新封装一下这个函数

  1. in_array
    in_array — 检查数组中是否存在某个值
    如果是字符串,是区分大小写的
    如果是字符串,array_search 也是区分大小写的
    in_array 跟array_search的情况一样,当被搜索的值等于0时也会判断出错,只是array_search返回的是key,in_array返回true与false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值