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> &</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>] => </span><span><span class="hljs-number">1</span></span><span>
[</span><span><span class="hljs-meta">1</span></span><span>] => </span><span><span class="hljs-number">2</span></span><span>
[</span><span><span class="hljs-meta">2</span></span><span>] => </span><span><span class="hljs-number">3</span></span><span>
[</span><span><span class="hljs-meta">3</span></span><span>] => </span><span><span class="hljs-number">4</span></span><span>
[</span><span><span class="hljs-meta">4</span></span><span>] => </span><span><span class="hljs-number">5</span></span><span>
)
</span></span>
然而,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> => </span><span><span class="hljs-string">'John'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> => </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>] => John
[</span><span><span class="hljs-meta">age</span></span><span>] => </span><span><span class="hljs-number">25</span></span><span>
[</span><span><span class="hljs-meta">0</span></span><span>] => 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> => </span><span><span class="hljs-string">'John'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> => </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>] => John
[</span><span><span class="hljs-meta">age</span></span><span>] => </span><span><span class="hljs-number">25</span></span><span>
[</span><span><span class="hljs-meta">job</span></span><span>] => 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>] => John
[</span><span><span class="hljs-meta">age</span></span><span>] => </span><span><span class="hljs-number">25</span></span><span>
[</span><span><span class="hljs-meta">job</span></span><span>] => developer
[</span><span><span class="hljs-meta">city</span></span><span>] => New York
)
</span></span>