當前位置: 首頁> 最新文章列表> [用array_fill填充負索引數組會發生什麼?行為和結果分析

[用array_fill填充負索引數組會發生什麼?行為和結果分析

gitbox 2025-09-30

1. 基本使用示例

<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>

輸出結果:

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

這與預期一致,從索引0 開始填充3 個元素。


2. 使用負數作為起始索引

$start_index為負數時,PHP 並不會拋出錯誤,而是直接以該負數作為鍵名填充數組。

示例:

 <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>

輸出結果:

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

可以看到,數組從-3 開始,依次填充到-1。
這說明負數索引在PHP 中是允許的,並且能按照正常的整數鍵規則向上遞增。


3. 與正數索引混合使用的影響

我們再看一個混合場景:

 <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">// 使用數組相加</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>

輸出結果:

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

這說明即使負數和正數索引同時存在,它們依然保持各自獨立的鍵名空間,不會發生衝突。


4. 注意事項

  1. 數組鍵允許負數<br> 在PHP 中,數組鍵既可以是正數,也可以是負數,只要是整數即可

  2. array_merge的區別<br> 使用array_merge時,數值鍵會被重新索引,而負數鍵也會被重新整理為從0 開始的正整數
    示例:

     <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>

    輸出結果:

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

    可見,負數索引在合併過程中會丟失原有的鍵值,轉而重新編號。