Data query in php can be classified into one-dimensional array search and multi-dimensional array search. If it is a simple one-dimensional array, we can directly use in_array, array_search and traversal to instantiate it. If it is a multi-dimensional array, we need to use other methods. .
For a one-dimensional array we can operate as follows
in_array 'Function searches for a given value in an array. in_array(value,array,type)type optional. If this parameter is set to true, it is checked whether the type of the searched data and the value of the array are the same.
array_key_exists 'array_key_exists() function determines whether the specified key exists in an array. If the key exists, it returns true, otherwise it returns false. array_key_exists(key,array)
array_search 'array_search() function is the same as in_array(), searching for a key value in an array. If the value is found, the key of the matching element is returned. If not found, returns false. array_search(value,array,strict)
From this point of view, when the amount of data is not large, such as less than 1000, any search method can be used, and it will not become a bottleneck;
When the amount of data is relatively large, array_key_exists is more appropriate.
Of course, the memory occupied by array_key_exists here is relatively large. According to calculations
Binary method to find whether an array contains a certain element, compatible with forward and reverse order, code implementation:
The code is as follows |
Copy code |
代码如下 |
复制代码 |
$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);
|
<🎜>$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'<🎜>
);<🎜>
// Positive sequence<🎜>
echo search($array, $searchValue);<🎜>
<🎜>//reverse order<🎜>
rsort($array);<🎜>
echo search($array, $searchValue);<🎜>
|
Example 2
PHP Find the i-th smallest element in an array
The code is as follows |
Copy code |
#Randomly select the i-th smallest number and use random quick sort to achieve
#Exchange elements
Function swap(&$arr, $i, $j) {
$temp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $temp;
}
#Randomly divided
Function randomized_partition(&$arr, $begin, $end) {
$rand_inx = rand($begin, $end);
swap($arr, $begin, $rand_inx);
return partition($arr, $begin, $end);
}
#Division
Function partition(&$arr, $begin, $end) {
#Use the first element as the central element
$pivot = $begin;
$low = $begin;
$high = $end;
while ($low < $high) {
while ($low < $high && $arr[$low] <= $arr[$pivot]) {
$low++;
}
while ($low < $high && $arr[$high] >= $arr[$pivot]) {
$high--;
}
swap($arr, $low, $high);
}
#Exchange hub element
If ($arr[$pivot] < $arr[$low]) {
$low--;
}
swap($arr, $pivot, $low);
return $low;
}
#Quick sort, not used here
Function quick_sort(&$arr, $begin, $end) {
$q = randomized_partition($arr, $begin, $end);
If ($q > $begin) {
quick_sort($arr, $begin, $q - 1);
}
if ($q < $end) {
quick_sort($arr, $q + 1, $end);
}
}
#Select the i-th smallest number
Function randomized_select(&$arr, $begin, $end, $i) {
if ($begin == $end) {
return $arr[$begin];
}
$q = randomized_partition($arr, $begin, $end);
$k = $q - $begin + 1; #k represents the number of elements less than or equal to q
if ($k == $i) { #If k=i, it means that q is the coordinate of the i-th smallest element
return $arr[$q]; {
return randomized_select($arr, $begin, $q - 1, $i);
} else { #The i-th smallest element is located on the right side of q. At this time, find the i-kth smallest element on the right
return randomized_select($arr, $q + 1, $end, $i - $k);
}
}
$arr = array(1, 5, 3, 7, 0, 0, 8, 4, 2, 9, 11);
$t = randomized_select($arr, 0, count($arr) - 1, 8);
Print_r("The 8th minimum element: {$t}");
echo " ";
Quick_sort($arr, 0, count($arr) - 1);
Print_r($arr);
?>
|
http://www.bkjia.com/PHPjc/631562.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/631562.htmlTechArticleData query in php can be classified into one-dimensional array search and multi-dimensional array search. If it is a simple one-dimensional We can directly use in_array, array_search and traversal to instantiate arrays, such as...