在php中数据查询可以分类一维数组查找,与多维数组查找了,如果是简单的一维数组我们可以直接使用in_array ,array_search 与遍历来实例了,如果是多维数组就需要使用其它办法。
对于一维数组我们可以如下操作
in_array '函数在数组中搜索给定的值。in_array(value,array,type)type 可选。如果设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同。
array_key_exists 'array_key_exists() 函数判断某个数组中是否存在指定的 key,如果该 key 存在,则返回 true,否则返回 false。array_key_exists(key,array)
array_search 'array_search() 函数与 in_array() 一样,在数组中查找一个键值。如果找到了该值,匹配元素的键名会被返回。如果没找到,则返回 false。array_search(value,array,strict)
从这里来看,在数据量不大的时候,比如小于1000,查找用哪一种都行,都不会成为瓶颈;
当数据量比较大的时候,用array_key_exists比较合适。
当然这里array_key_exists占用的内存比较大,经测算
二分法查找数组是否包含某一元素,兼容正反序,代码实现:
代码如下 | 复制代码 | ||||
$searchValue = (int)$_GET['key']; function search(array $array, $value) { $max = count($array)-1; $min = 0; $isAscSort = $array[$min] < $array[$max]; while (TRUE) { $sum = $min $max; $midKey = (int)($sum%2 == 1 ? ceil($sum/2) : $sum/2); if ($max < $min) { return -1; } else if ($value == $array[$midKey]) { return 1; } else if ($value > $array[$midKey]) { $isAscSort ? $min = $midKey 1 : $max = $midKey-1; } else if ($value < $array[$midKey]) { $isAscSort ? $max = $midKey-1 : $min = $midKey 1; } } } $array = array( '4', '5', '7', '8', '9', '10', '11', '12' ); // 正序 echo search($array, $searchValue); // 逆序 rsort($array); echo search($array, $searchValue); 例二 PHP 查找数组第i小元素
|