在PHP中,如果你需要高效地验证一个数组 $arr1
中的元素是否在另一个数组 $arr2
的区间范围内,可以使用一些内置的数组函数和循环来实现。假设 $arr2
是一个包含区间的数组,每个区间是一个包含两个元素的数组,表示区间的起始和结束值。
$arr1 = [5, 10, 15, 20, 25];
$arr2 = [
[0, 10],
[11, 20],
[21, 30]
];
验证 $arr1
中的每个元素是否在 $arr2
的某个区间内。
我们可以使用嵌套循环来遍历 $arr1
和 $arr2
,并检查每个元素是否在某个区间内。
function validateIntervals($arr1, $arr2) {
$result = [];
foreach ($arr1 as $value) {
$isInInterval = false;
foreach ($arr2 as $interval) {
if ($value >= $interval[0] && $value <= $interval[1]) {
$isInInterval = true;
break;
}
}
$result[$value] = $isInInterval;
}
return $result;
}
$arr1 = [5, 10, 15, 20, 25];
$arr2 = [
[0, 10],
[11, 20],
[21, 30]
];
$validationResult = validateIntervals($arr1, $arr2);
print_r($validationResult);
Array
(
[5] => 1
[10] => 1
[15] => 1
[20] => 1
[25] => 1
)
validateIntervals
函数接受两个数组 $arr1
和 $arr2
作为参数。$arr1
中的每个元素,函数会遍历 $arr2
中的每个区间,检查该元素是否在区间内。$isInInterval
会被设置为 true
,并且跳出内层循环。$arr1
中的元素,值为布尔值,表示该元素是否在 $arr2
的某个区间内。如果 $arr2
的区间是有序的,可以考虑使用二分查找来优化区间查找的效率。这样可以减少不必要的比较操作。
function binarySearch($arr, $value) {
$low = 0;
$high = count($arr) - 1;
while ($low <= $high) {
$mid = intval(($low + $high) / 2);
if ($value >= $arr[$mid][0] && $value <= $arr[$mid][1]) {
return true;
} elseif ($value < $arr[$mid][0]) {
$high = $mid - 1;
} else {
$low = $mid + 1;
}
}
return false;
}
function validateIntervalsOptimized($arr1, $arr2) {
$result = [];
foreach ($arr1 as $value) {
$result[$value] = binarySearch($arr2, $value);
}
return $result;
}
$arr1 = [5, 10, 15, 20, 25];
$arr2 = [
[0, 10],
[11, 20],
[21, 30]
];
$validationResult = validateIntervalsOptimized($arr1, $arr2);
print_r($validationResult);
Array
(
[5] => 1
[10] => 1
[15] => 1
[20] => 1
[25] => 1
)
binarySearch
函数实现了二分查找,用于在有序的 $arr2
中查找 $value
是否在某个区间内。validateIntervalsOptimized
函数使用 binarySearch
来优化区间查找的效率。通过这种方式,你可以高效地验证 $arr1
中的元素是否在 $arr2
的区间范围内。