PHP二分查找需在已排序的数值索引数组中实现,时间复杂度O(log n),手动实现需维护左右边界;不适用于关联数组,PHP无内置二分查找函数。

PHP 数组中的二分查找是一种在**已排序数组**中快速定位目标值的算法,它不依赖 PHP 内置函数(如 array_search),而是通过反复将搜索范围缩小一半来实现,时间复杂度为 O(log n),比线性遍历(O(n))更高效。
二分查找的前提条件
必须满足两个关键前提,否则结果不可靠:
数组必须是升序或降序排列(通常默认按升序处理)数组应是连续、数值索引的数组(非关联数组),或至少键名能映射为有序整数序列
手动实现一个基础二分查找函数
以下是一个简洁、可直接使用的升序数组二分查找示例:
function binarySearch($arr, $target) { $left = 0; $right = count($arr) - 1;while ($left <= $right) { $mid = (int)(($left + $right) / 2); if ($arr[$mid] === $target) { return $mid; // 返回索引位置 } elseif ($arr[$mid] < $target) { $left = $mid + 1; } else { $right = $mid - 1; }}return -1; // 未找到
}
立即学习“PHP免费学习笔记(深入)”;
// 使用示例$nums = [1, 3, 5, 7, 9, 11];echo binarySearch($nums, 7); // 输出:3
注意关联数组和非数字键的问题
PHP 关联数组(如 ['a'=>1, 'b'=>3, 'c'=>5])的键不是连续数字,无法直接套用标准二分查找逻辑。如果非要对值做二分查找:
先用 array_values() 提取值为纯索引数组查找成功后,再用 array_search() 在原数组中找对应键(会损失 O(log n) 优势)更合理的方式是:若需高频查找,改用哈希结构(如普通 isset($map[$key]))
PHP 有没有内置二分查找?
PHP 标准库没有提供直接的二分查找函数**(如 Python 的 bisect)。但有间接支持:
array_search() 是线性查找,不保证效率扩展如 spl 或第三方库(如 ramsey/array-sort)可能封装了相关工具自定义函数仍是主流做法,简单清晰,便于控制边界和类型比较
基本上就这些。二分查找本身不复杂,但在 PHP 中容易忽略“必须有序”这个硬性前提——无序数组上强行使用,结果是随机且不可预测的。
以上就是php数组中的二分查找是什么的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1341482.html
微信扫一扫
支付宝扫一扫