
本文介绍如何使用php的array_unshift()函数,在关联数组或索引数组的最前面添加一个新元素(键为0、值为"all"),同时保持原有键值对及其顺序不变。
本文介绍如何使用php的array_unshift()函数,在关联数组或索引数组的最前面添加一个新元素(键为0、值为"all"),同时保持原有键值对及其顺序不变。
在PHP中,若需将一个新元素作为第一个元素插入数组头部,且不改变其余元素的键和值,应使用 array_unshift() 函数。该函数会将传入的值作为新元素 prepend(前置) 到数组开头,并自动为其分配整数索引(从0开始递增),而原有元素的键值关系完全保留——这正是本例所需行为。
⚠️ 注意:array_unshift() 仅支持值插入,不支持自定义键名。它总是为新增元素分配数字键(如0、1、2…),因此当目标是 [0] => 'All' 时,直接调用即可;但若需指定非数字键(如 ['first' => 'All']),则不能依赖 array_unshift(),而应采用更灵活的方式(见后文说明)。
✅ 正确用法示例:
$arr = [
8 => 'ab',
10 => 'cd',
11 => 'ef',
9 => 'gh',
7 => 'ik'
];
array_unshift($arr, 'All');
print_r($arr);
// 输出:
// Array
// (
// [0] => All
// [1] => ab
// [2] => cd
// [3] => ef
// [4] => gh
// [5] => ik
// )
⚠️ 但注意:上述结果中,原数组的数字键(8、10、11等)会被重置为连续整数(1→5) ——这与题目期望的输出不符!题目要求保留原始键 [8] => ab、[10] => cd 等,仅在开头新增 [0] => 'All',其余键值对位置和键名均不变。
因此,array_unshift() 在此场景下并不适用(因其会重排所有键)。真正符合题意的解法是手动构造新数组:
$arr = [
8 => 'ab',
10 => 'cd',
11 => 'ef',
9 => 'gh',
7 => 'ik'
];
// 正确方式:以 [0 => 'All'] 开头,再合并原数组(保持键不变)
$result = [0 => 'All'] + $arr;
print_r($result);
// 输出:
// Array
// (
// [0] => All
// [8] => ab
// [10] => cd
// [11] => ef
// [9] => gh
// [7] => ik
// )
? 关键点说明:
- + 数组合并运算符会保留左侧数组的键值对,并跳过右侧数组中与左侧重复的键,完美实现“前置新增、其余不动”;
- 不要使用 array_merge(),因为它会重置所有数字键,导致原关联键丢失;
- 此方法适用于任何关联数组,无论键是否为数字或字符串。
✅ 总结:
若需在数组开头添加带指定键(如 0)的元素,同时严格保留原数组所有键值对,请使用 $new_array = [$key => $value] + $original_array;array_unshift() 仅适用于需要自动编号、且可接受键被重排的场景。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











