You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP:如何高效获取数值序列中断后的首个数组元素

高效找到降序数组中断后的首个元素

嘿,针对你这个需求,我有两个简单又高效的实现思路,都是线性遍历找到目标就停,完全适配你的场景~

方法一:检查相邻元素差值

因为你的数组是降序连续序列(本该是10→9→8→7→6→4),正常相邻元素的差应该是1。一旦差值大于1,说明中间有缺失,下一个元素就是你要找的中断后首个元素。

代码实现:

$array = array(0 => 10, 1 => 9, 2 => 8, 3 => 6, 4=> 4);
$target = null;

// 遍历到倒数第二个元素即可,避免越界
for ($i = 0; $i < count($array) - 1; $i++) {
    if ($array[$i] - $array[$i+1] > 1) {
        $target = $array[$i+1];
        break; // 找到目标立刻终止遍历,提升效率
    }
}

echo $target; // 输出:6

这个方法逻辑直白,时间复杂度是O(n),但实际执行时最多遍历到中断位置就停,对于你的数组来说只需要循环3次就搞定,非常高效。

方法二:对比索引与预期值

既然数组是从10开始的降序序列,那第$index个位置的预期值应该是起始值 - $index(比如索引0对应10-0=10,索引1对应10-1=9,以此类推)。一旦实际值和预期值不匹配,这个实际值就是中断后的首个元素。

代码实现:

$array = array(0 => 10, 1 => 9, 2 => 8, 3 => 6, 4=> 4);
$target = null;
$startVal = reset($array); // 获取数组第一个元素10

foreach ($array as $idx => $val) {
    if ($val !== $startVal - $idx) {
        $target = $val;
        break;
    }
}

echo $target; // 输出:6

这个方法不需要依赖相邻元素的对比,逻辑更独立,同样是找到目标就终止遍历,效率和方法一一样优秀。

补充说明

这两个方法都是当前场景下的最优解,因为你必须遍历到中断位置才能找到目标,不可能有比O(n)更快的时间复杂度(除非你能提前知道中断位置,但显然不行)。而且代码都很简洁,没有冗余操作,完全满足“简便且高效”的要求。

内容的提问来源于stack exchange,提问作者Md Abubakar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:41:37