Menu

PHP array_push():向数组添加元素

array_push($arr, $value) 向数组末尾添加一个或多个值;只添加一个值时,$arr[] = $value 效果相同而且更快。学习如何在数组的末尾、开头或中间添加元素,添加键和值,并避开经典的返回值 bug。

本页包含可运行的编辑器。编辑、运行,立即查看输出。

array_push($arr, $value) 向数组末尾添加一个值。只添加一个值时,简写 $arr[] = $value; 能完成同样的工作,而且不需要调用函数,大多数 PHP 代码用的都是它。两者都会直接修改原数组。

array_push() 按引用接收数组,所以它会修改你传入的变量。它返回新的元素个数,你可以忽略这个值。

array_push 与 $arr[] =

添加一个值时用 $arr[] = $value:它更短,而且省去了函数调用,在大循环里这点差别会累积起来。当你要在一条语句中添加多个值,或者要展开一个值列表时,用 array_push()。

$arr[] = 也可以用在还不存在的变量上:PHP 会创建这个数组。array_push() 则需要一个已经存在的数组:对未定义的变量调用它会抛出 TypeError: array_push(): Argument #1 ($array) must be of type array, null given。

添加键和值

array_push() 只会用下一个整数键追加值。要添加一个命名的键,直接给它赋值。要一次添加多个键值对,使用 +=(保留已有的键)或 array_merge()(以新值为准)。

键冲突时 + 和 array_merge() 的区别,在 array_merge 页面中有讲解。

添加到开头:array_unshift

array_unshift($arr, $value) 在开头插入元素。整数键会重新编号,让新值的索引变成 0;字符串键保持不变。和 array_push() 一样,它可以接收多个值,并返回新的元素个数。

如果要把一个命名的键值对放在最前面,就新建一个数组:$menu = ['login' => '/login'] + $menu;。

插入到指定位置

array_splice($arr, $offset, 0, $values) 只插入、不删除:它从 $offset 开始,删除 0 个元素,再把新值放到那里。插入点之后的整数键会重新编号。

array_splice() 也可以删除和替换元素;删除元素的页面展示了这些用法。

追加另一个数组

array_push($a, $b) 会把 $b 作为一个嵌套元素添加进去,这通常不是你想要的。要逐个添加 $b 中的值,就把它展开,或者用展开语法或 array_merge() 生成一个新数组。

常见错误:把返回值赋回去

array_push() 返回一个数字,也就是新的元素个数。把它赋回给数组变量,会用一个整数替换掉你的数组,下一次对它调用 array_push() 就会抛出 TypeError。

array_unshift() 和返回 true 的 sort() 也是如此。直接修改数组的函数返回的是一个状态,而不是数组本身。

常见问题

PHP 中 array_push 和 $arr[] 有什么区别?

两者都是追加到末尾。$arr[] = $x; 添加一个值,不需要调用函数,所以是常用的写法,也稍快一些。array_push($arr, $a, $b, $c) 适合一次添加多个值,并且会返回新的元素个数。

PHP 中怎样向数组添加键和值?

直接给这个键赋值:$arr['color'] = 'blue';。array_push() 做不到这一点,因为它总是使用下一个整数键。要一次添加多个键值对,使用 $arr += ['a' => 1, 'b' => 2]; 或 array_merge()。

PHP 中怎样在数组开头添加元素?

使用 array_unshift($arr, $value)。它会重新编号整数键,让新值的索引变成 0;字符串键保持不变。

为什么 array_push 之后我的数组变成了一个数字?

因为 array_push() 返回的是新的元素个数,而不是数组。写成 $arr = array_push($arr, 'x'); 会用这个数字替换掉数组。应该单独一行调用它:array_push($arr, 'x');。

Coddy 编程语言插图

和 Coddy 一起学编程

开始