Current Location: Home> Latest Articles> What Happens When You Use array_fill with Negative Indexes? Behavior and Results Explained

What Happens When You Use array_fill with Negative Indexes? Behavior and Results Explained

gitbox 2025-09-30

1. Basic Usage Example

<span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_fill</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">'A'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span></span>

Output:

<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [</span><span><span class="hljs-number">0</span></span><span>] => A
    [</span><span><span class="hljs-number">1</span></span><span>] => A
    [</span><span><span class="hljs-number">2</span></span><span>] => A
)
</span></span>

This matches expectations, filling 3 elements starting from index 0.


2. Using Negative Starting Index

When $start_index is negative, PHP does not throw an error. Instead, it uses the negative number as the key for the array.

Example:

<span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_fill</span></span><span>(-</span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">'B'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$result</span></span><span>);
</span></span>

Output:

<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [-</span><span><span class="hljs-number">3</span></span><span>] => B
    [-</span><span><span class="hljs-number">2</span></span><span>] => B
    [-</span><span><span class="hljs-number">1</span></span><span>] => B
)
</span></span>

Here, the array starts from -3 and increments to -1.
This shows that negative indexes are allowed in PHP and follow the usual integer key increment rules.


3. Effects of Mixing with Positive Indexes

Consider a mixed scenario:

<span><span><span class="hljs-variable">$result1</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_fill</span></span><span>(-</span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'X'</span></span><span>);
</span><span><span class="hljs-variable">$result2</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_fill</span></span><span>(</span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'Y'</span></span><span>);
</span><span><span class="hljs-variable">$merged</span></span><span> = </span><span><span class="hljs-variable">$result1</span></span><span> + </span><span><span class="hljs-variable">$result2</span></span><span>; </span><span><span class="hljs-comment">// Using array addition</span></span><span>
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$merged</span></span><span>);
</span></span>

Output:

<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [-</span><span><span class="hljs-number">2</span></span><span>] => X
    [-</span><span><span class="hljs-number">1</span></span><span>] => X
    [</span><span><span class="hljs-number">3</span></span><span>] => Y
    [</span><span><span class="hljs-number">4</span></span><span>] => Y
)
</span></span>

This demonstrates that negative and positive indexes maintain separate key spaces and do not conflict when used together.


4. Notes

  1. Array keys can be negative
    In PHP, array keys can be positive or negative integers.

  2. Difference from array_merge
    When using array_merge, numeric keys are reindexed, and negative keys are renumbered starting from 0.
    Example:

    <span><span><span class="hljs-variable">$a</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_fill</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-string">'Z'</span></span><span>);
    </span><span><span class="hljs-variable">$b</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_fill</span></span><span>(</span><span><span class="hljs-number">5</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'W'</span></span><span>);
    </span><span><span class="hljs-variable">$merged</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_merge</span></span><span>(</span><span><span class="hljs-variable">$a</span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>);
    </span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$merged</span></span><span>);
    </span></span>

    Output:

    <span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
    (
        [</span><span><span class="hljs-number">0</span></span><span>] => Z
        [</span><span><span class="hljs-number">1</span></span><span>] => Z
        [</span><span><span class="hljs-number">2</span></span><span>] => Z
        [</span><span><span class="hljs-number">3</span></span><span>] => W
        [</span><span><span class="hljs-number">4</span></span><span>] => W
    )
    </span></span>

    As you can see, negative keys lose their original indexes during merging and are renumbered.