array_push() is a function specifically used to add one or more elements to the end of an array. Its syntax is as follows:
<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: The target array, passed by reference.
$values: The elements to be added to the end of the array, one or more.
For regular indexed arrays (where the keys are numbers), array_push() adds the new elements to the end of the array, and the indexes are automatically incremented.
<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 class="hljs-number">5</span></span>); </span><span><span class="hljs-comment">// Adds 4 and 5 to the end of the array</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>
Output:
<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>
However, the behavior of array_push() is a bit different when it comes to associative arrays. Let’s see why.
For associative arrays, using array_push() is not recommended. The reason is that array_push() appends elements to the end of the array based on its structure. Since associative array keys are defined by the developer and are not necessarily numeric or sequential, using array_push() will add new values with automatically generated numeric indexes instead of the keys you specify.
<span><span><span class="hljs-variable">$assocArray</span></span><span> = [</span><span><span class="hljs-string">'name'</span></span> => </span><span><span class="hljs-string">'John'</span></span>, </span><span><span class="hljs-string">'age'</span></span> => </span><span><span class="hljs-number">25</span></span>];
</span><span><span class="hljs-title function_ invoke__">array_push</span></span>(</span><span><span class="hljs-variable">$assocArray</span></span>, </span><span><span class="hljs-string">'developer'</span></span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span>(</span><span class="hljs-variable">$assocArray</span></span>);
</span></span>
Output:
<span><span>Array
(
[</span><span><span class="hljs-meta">name</span></span>] => John
[</span><span><span class="hljs-meta">age</span></span>] => </span><span><span class="hljs-number">25</span></span>
[</span><span><span class="hljs-meta">0</span></span>] => developer
)
</span></span>
As you can see, array_push() added the value 'developer' to the array, but it automatically assigned it the numeric key [0], which is not the intended behavior for associative arrays.
The right way to add elements to an associative array is by directly assigning values with the desired keys, rather than using array_push(). For example, if we want to add a new key-value pair:
<span><span><span class="hljs-variable">$assocArray</span></span> = [</span><span><span class="hljs-string">'name'</span></span> => </span><span><span class="hljs-string">'John'</span></span>, </span><span><span class="hljs-string">'age'</span></span> => </span><span><span class="hljs-number">25</span></span>];
</span><span><span class="hljs-variable">$assocArray</span></span>[</span><span><span class="hljs-string">'job'</span></span>] = </span><span><span class="hljs-string">'developer'</span></span>; </span><span><span class="hljs-comment">// Add element with associative key "job"</span></span><span>
</span><span><span class="hljs-title function_ invoke__">print_r</span></span>(</span><span><span class="hljs-variable">$assocArray</span></span>);
</span></span>
Output:
<span><span>Array
(
[</span><span><span class="hljs-meta">name</span></span>] => John
[</span><span><span class="hljs-meta">age</span></span>] => </span><span><span class="hljs-number">25</span></span>
[</span><span><span class="hljs-meta">job</span></span>] => developer
)
</span></span>
As shown above, by explicitly assigning the key job, we can correctly add an element to the associative array while maintaining full control over its structure.
If you want to add key-value pairs dynamically, you can first define a key and then assign a value to it. For example:
<span><span><span class="hljs-variable">$key</span></span> = </span><span><span class="hljs-string">'city'</span></span>;
</span><span><span class="hljs-variable">$value</span></span> = </span><span><span class="hljs-string">'New York'</span></span>;
</span><span><span class="hljs-variable">$assocArray</span></span>[</span><span><span class="hljs-variable">$key</span></span>] = </span><span><span class="hljs-variable">$value</span></span>; </span><span><span class="hljs-comment">// Add dynamically</span></span><span>
</span><span><span class="hljs-title function_ invoke__">print_r</span></span>(</span><span><span class="hljs-variable">$assocArray</span></span>);
</span></span>
Output:
<span><span>Array
(
[</span><span><span class="hljs-meta">name</span></span>] => John
[</span><span><span class="hljs-meta">age</span></span>] => </span><span><span class="hljs-number">25</span></span>
[</span><span><span class="hljs-meta">job</span></span>] => developer
[</span><span><span class="hljs-meta">city</span></span>] => New York
)
</span></span>