当前位置: 首页> 最新文章列表> PHP关联数组可以用array_push添加元素吗?正确方法教你操作

PHP关联数组可以用array_push添加元素吗?正确方法教你操作

gitbox 2025-08-30

array_push() 的作用

array_push() 是一个专门用于向数组的末尾添加一个或多个元素的函数。它的语法如下:

<span><span><span class="hljs-title function_ invoke__">array_push</span></span><span>(</span><span><span class="hljs-keyword">array</span></span><span> &amp;</span><span><span class="hljs-variable">$array</span></span><span>, </span><span><span class="hljs-keyword">mixed</span></span><span> ...</span><span><span class="hljs-variable">$values</span></span><span>): </span><span><span class="hljs-keyword">int</span></span><span>
</span></span>
  • $array:这是目标数组,它是按引用传递的。

  • $values:这些是要添加到数组末尾的元素,可以是一个或多个。

对于普通的索引数组(即,数组的键是数字),array_push() 会将新元素添加到数组的末尾,数组的索引会自动递增。

<span><span><span class="hljs-variable">$arr</span></span><span> = [</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>];
</span><span><span class="hljs-title function_ invoke__">array_push</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>, </span><span><span class="hljs-number">4</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>);  </span><span><span class="hljs-comment">// 将 4 和 5 添加到数组末尾</span></span><span>
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>);
</span></span>

输出:

<span><span>Array
(
    [</span><span><span class="hljs-meta">0</span></span><span>] =&gt; </span><span><span class="hljs-number">1</span></span><span>
    [</span><span><span class="hljs-meta">1</span></span><span>] =&gt; </span><span><span class="hljs-number">2</span></span><span>
    [</span><span><span class="hljs-meta">2</span></span><span>] =&gt; </span><span><span class="hljs-number">3</span></span><span>
    [</span><span><span class="hljs-meta">3</span></span><span>] =&gt; </span><span><span class="hljs-number">4</span></span><span>
    [</span><span><span class="hljs-meta">4</span></span><span>] =&gt; </span><span><span class="hljs-number">5</span></span><span>
)
</span></span>

然而,array_push() 的行为与关联数组有些不同。我们来看看为什么。


关联数组能否使用 array_push()

对于关联数组,array_push() 并不是一个推荐的方式。原因在于,array_push() 会根据数组的结构将元素附加到数组的末尾,而关联数组的键是由开发者自行定义的,不一定是数字型的递增序列。所以,尝试使用 array_push() 向关联数组添加元素时,新的元素会被添加到数组的末尾,并且会自动使用一个递增的整数索引作为键,而不是你自己定义的关联键。

<span><span><span class="hljs-variable">$assocArray</span></span><span> = [</span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'John'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> =&gt; </span><span><span class="hljs-number">25</span></span><span>];
</span><span><span class="hljs-title function_ invoke__">array_push</span></span><span>(</span><span><span class="hljs-variable">$assocArray</span></span><span>, </span><span><span class="hljs-string">'developer'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$assocArray</span></span><span>);
</span></span>

输出:

<span><span>Array
(
    [</span><span><span class="hljs-meta">name</span></span><span>] =&gt; John
    [</span><span><span class="hljs-meta">age</span></span><span>] =&gt; </span><span><span class="hljs-number">25</span></span><span>
    [</span><span><span class="hljs-meta">0</span></span><span>] =&gt; developer
)
</span></span>

可以看到,array_push() 向数组末尾添加了一个值 'developer',但是它自动使用了数字索引 [0],这显然并不是我们期望的行为。


正确向关联数组添加元素的方法

要正确向关联数组添加元素,应该直接使用数组的键来进行赋值,而不是使用 array_push()。例如,假设我们希望添加一个新的键值对,可以按照以下方式进行操作:

<span><span><span class="hljs-variable">$assocArray</span></span><span> = [</span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'John'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> =&gt; </span><span><span class="hljs-number">25</span></span><span>];
</span><span><span class="hljs-variable">$assocArray</span></span><span>[</span><span><span class="hljs-string">'job'</span></span><span>] = </span><span><span class="hljs-string">'developer'</span></span><span>;  </span><span><span class="hljs-comment">// 使用关联键 "job" 添加元素</span></span><span>
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$assocArray</span></span><span>);
</span></span>

输出:

<span><span>Array
(
    [</span><span><span class="hljs-meta">name</span></span><span>] =&gt; John
    [</span><span><span class="hljs-meta">age</span></span><span>] =&gt; </span><span><span class="hljs-number">25</span></span><span>
    [</span><span><span class="hljs-meta">job</span></span><span>] =&gt; developer
)
</span></span>

如上所示,我们通过直接指定关联键 job 来向关联数组中添加元素,这样就能准确地控制数组的结构。

如果你需要动态添加键值对,可以先定义一个新的键,再将对应的值赋给它。例如:

<span><span><span class="hljs-variable">$key</span></span><span> = </span><span><span class="hljs-string">'city'</span></span><span>;
</span><span><span class="hljs-variable">$value</span></span><span> = </span><span><span class="hljs-string">'New York'</span></span><span>;
</span><span><span class="hljs-variable">$assocArray</span></span><span>[</span><span><span class="hljs-variable">$key</span></span><span>] = </span><span><span class="hljs-variable">$value</span></span><span>;  </span><span><span class="hljs-comment">// 动态添加</span></span><span>
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$assocArray</span></span><span>);
</span></span>

输出:

<span><span>Array
(
    [</span><span><span class="hljs-meta">name</span></span><span>] =&gt; John
    [</span><span><span class="hljs-meta">age</span></span><span>] =&gt; </span><span><span class="hljs-number">25</span></span><span>
    [</span><span><span class="hljs-meta">job</span></span><span>] =&gt; developer
    [</span><span><span class="hljs-meta">city</span></span><span>] =&gt; New York
)
</span></span>