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

PHP中array_unique去重后数组键不连续,Undefined offset问题解决

解决数组重新索引的问题

你遇到的问题根源在于array_unique()函数的特性:它只会移除数组中的重复值,但不会重置数组的键名,所以处理后的数组键会保持原来的非连续状态(比如你的示例里是0、3、4、5、6、7),这就导致for循环遍历的时候,访问$keys[1]这类不存在的键时触发Undefined offset错误。

正确的解决方案:使用array_values()

array_values()函数会返回一个新数组,自动将键名重置为从0开始的连续整数索引,完美解决你的需求。修改后的代码如下:

$keys = preg_split('/\r\n|[\r\n]/', $request->text);
$keys = array_unique($keys);
// 关键步骤:重新索引数组
$keys = array_values($keys);
$keys_count = count($keys);

之后再运行你的for循环:

for ($i=0; $i < $keys_count; $i++) { 
    print_r($keys[$i]); 
}

就能正常遍历所有元素,不会再出现偏移量错误了。

为什么array_fill_keys不适合?

你尝试的array_fill_keys([$i], $keys)逻辑是错误的:这个函数的作用是用指定的键数组来填充同一个值,你传入的[$i]是单个键(比如0),所以它会把整个原数组作为值赋值给这个键,最终得到的是嵌套数组,这显然不是你想要的重新索引效果。

额外小提示

如果不需要用for循环,其实直接用foreach遍历原数组(即使键不连续)也是可以正常工作的:

foreach ($keys as $key) {
    print_r($key);
}

但如果必须依赖连续的数字键来做逻辑,array_values()是最直接高效的方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:13:58