PHP数组查找函数

php内置的三个数组函数来查找指定值是否存在于数组中,这三个数组分别是 in_array() , array_search() , array_key_exists()

in_array(value,array,type)

该函数的作用是在数组array中搜索指定的value值,type是可选参数,如果设置该参数为 true ,则检查搜索的数据与数组的值的类型是否相同,即恒等于。

<?php
$people = array("Peter", "Joe", "Glenn", "Cleveland");
if(in_array("Glenn",$people)){
  echo "Match found";
}else{
  echo "Match not found";
}

array_key_exists(key,array)

该函数是判断某个数组array中是否存在指定的 key,如果该 key 存在,则返回 true,否则返回 false。

<?php
$a=array("a"=>"Dog","b"=>"Cat");
if(array_key_exists("a",$a)){
echo "Key exists!";
}else{
echo "Key does not exist!";
}

array_search(value,array,strict)

array_search() 函数与 in_array() 一样,在数组中查找一个键值。如果找到了该值,则返回匹配该元素所对应的键名。如果没找到,则返回 false。注意在 PHP 4.2.0 之前,函数在失败时返回 null 而不是 false。同样如果第三个参数 strict 被指定为 true,则只有在数据类型和值都一致时才返回相应元素的键名。

<?php
$a=array("a"=>"Dog","b"=>"Cat","c"=>5,"d"=>"5");
echo array_search("Dog",$a);
echo array_search("5",$a);

重点

$array = ['a', 'b', 'c'];
var_dump(in_array(0, $array));      // 返回bool(true),也就相当于数组中有0
var_dump(in_array(0, $array, true));      // 返回bool(false),也就相当于数组中无0
var_dump(array_search(0, $array));  // 返回int(0),也就是第一个值的下标
var_dump(array_search(0, $array, true));  // 返回false

在比较前,PHP强制转换了类型

在PHP中,当string的类型的数据和int类型的数据进行对比的时候,会强制把string转换为int,而如果string的类型数据第一个数字,就会被转换为0。


总结

所以需要用 in_array() 或者是 array_search() 的时候,尽量把第三个参数设置为true,另外呢,如果设置第三个参数为true的话,那么在查找的时候,会直接对比类型和值,避免了PHP的自动转换类型,性能会快很多。不过呢,数组查询呢,还是尽量使用isset函数或者是array_key_exists函数来代替。


流言终结者

采用 array_flip() 翻转后,用 isset() 代替 in_array() 函数,用 $array[key] 替代 array_search, 这样能解决大数组超时耗时问题?

<?php
$array = array();

for ($i=0; $i<2000000; $i++){
    ##随机字符串
    $array[$i] = 'test'.$i;
}

$str = $array[150000];

$time1 = microtime(true);
array_search($str, $array,true);
$time2 = microtime(true);
echo '原始方法:'.($time2-$time1)."\n";

$time3 =  microtime(true);
$new_array = array_flip($array);
isset($new_array[$str]);
$time4 = microtime(true);
echo '新方法:'.($time4-$time3);

运行结果
原始方法:0.0017399787902832
新方法:0.055043935775757
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇