PHP中按值/键删除数组元素出现Undefined offset错误如何解决
报错原因
Undefined offset: 46报错是因为你直接通过$ary[$value_to_remove]取数组元素时,没有判断这个键是否真的存在于数组中,当目标值没有作为数组的键出现时,就会触发偏移不存在的错误。
你原本的实现逻辑也不符合需求:你只是手动取了两个元素塞到结果里,没有做通用的过滤逻辑,一旦数组长度、键值结构变化就会出错。
正确实现代码
根据你给出的输入输出示例,你需要把关联数组的所有键、值合并后,过滤掉等于目标值的元素,最终返回连续索引的数组,实现代码如下:
$ary = Auth::user()->friends()->pluck('user_id')->toArray(); $value_to_remove = Auth::id(); // 合并数组的键和值为一个一维数组 $mergeList = array_merge(array_keys($ary), array_values($ary)); // 过滤掉目标值,重置数组索引 $output = array_values(array_filter($mergeList, function($item) use ($value_to_remove) { return $item !== $value_to_remove; }));
如果你的PHP版本在7.4以上,可以用箭头函数简化过滤逻辑:
$output = array_values(array_filter($mergeList, fn($item) => $item !== $value_to_remove));
执行后$output就是你需要的[8,7]结构。
内容的提问来源于stack exchange,提问作者CoderTn
相关产品推荐
相关产品推荐

