当 php 数组的键不连续(如 [50]、[53]、[58])时,可通过 `array_keys()` 提取键列表,再用 `array_search()` 定位当前键索引,最后通过索引偏移获取前/后相邻元素。
在实际开发中,我们常遇到关联数组键名无序或非连续的情况(例如数据库主键作为数组键)。此时无法依赖 $key + 1 这类算术递增来获取“下一个”元素——因为键 53 的下一个是 58,而非 54。PHP 原生不提供直接的“相邻键遍历”函数,但可通过组合内置函数高效实现。
核心思路是:将键与值解耦为两个独立索引数组,利用数值索引的顺序性完成定位与偏移:

以下是完整、健壮的示例代码(含边界检查):
function getNextElement($array, $currentKey) {
$keys = array_keys($array);
$currentIndex = array_search($currentKey, $keys);
if ($currentIndex === false || $currentIndex >= count($keys) - 1) {
return null; // 无下一个元素
}
$nextKey = $keys[$currentIndex + 1];
return [
'key' => $nextKey,
'value' => $array[$nextKey]
];
}
// 示例数据
$data = [
50 => ['product_id' => 50, 'unit' => 1],
53 => ['product_id' => 53, 'unit' => 1],
58 => ['product_id' => 58, 'unit' => 1],
];
$result = getNextElement($data, 53);
if ($result) {
echo "下一个键为 {$result['key']}, 对应数据:\n";
print_r($result['value']);
}
// 输出:下一个键为 58, 对应数据:
// Array ( [product_id] => 58 [unit] => 1 )⚠️ 注意事项:
总结:PHP 中处理非连续键的相邻访问,本质是将“逻辑顺序”(键的插入/定义顺序)转化为“物理顺序”(array_keys() 生成的索引数组),再借助数值索引完成精准跳转——简洁、可靠,且完全符合 PHP 的数组语义。