當前位置: 首頁> 最新文章列表> array_fill_keys 配array_walk 怎麼用?數據批量處理實例解析

array_fill_keys 配array_walk 怎麼用?數據批量處理實例解析

gitbox 2025-08-25

一、 array_fill_keys函數介紹

array_fill_keys函數用於創建一個新的數組,數組的鍵來自一個給定的數組,而每個鍵對應的值都是相同的指定值。該函數的原型如下:

 <span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-title function_ invoke__">array_fill_keys</span></span><span> ( </span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$keys</span></span><span> , </span><span><span class="hljs-keyword">mixed</span></span><span> </span><span><span class="hljs-variable">$value</span></span><span> )
</span></span>
  • $keys :這是一個包含鍵名的數組。

  • $value :每個鍵對應的值,所有鍵都會對應到這個值。

示例

 <span><span><span class="hljs-variable">$keys</span></span><span> = [</span><span><span class="hljs-string">'apple'</span></span><span>, </span><span><span class="hljs-string">'banana'</span></span><span>, </span><span><span class="hljs-string">'cherry'</span></span><span>];
</span><span><span class="hljs-variable">$value</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_fill_keys</span></span><span>(</span><span><span class="hljs-variable">$keys</span></span><span>, </span><span><span class="hljs-variable">$value</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>Array
(
    [</span><span><span class="hljs-meta">apple</span></span><span>] =&gt; </span><span><span class="hljs-number">0</span></span><span>
    [</span><span><span class="hljs-meta">banana</span></span><span>] =&gt; </span><span><span class="hljs-number">0</span></span><span>
    [</span><span><span class="hljs-meta">cherry</span></span><span>] =&gt; </span><span><span class="hljs-number">0</span></span><span>
)
</span></span>

這個例子創建了一個新的數組,數組的鍵名來自$keys數組,每個鍵的值都是0

二、 array_walk函數介紹

array_walk函數用於遍歷數組,並對每個元素應用一個回調函數。它的原型如下:

 <span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">array_walk</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">callable</span></span><span> </span><span><span class="hljs-variable">$callback</span></span><span> [, </span><span><span class="hljs-keyword">mixed</span></span><span> </span><span><span class="hljs-variable">$userdata</span></span><span> = </span><span><span class="hljs-literal">NULL</span></span><span> ] )
</span></span>
  • $array :這是傳入的數組,注意傳入的是引用類型,所以會直接修改原數組。

  • $callback :回調函數,用於對數組的每個元素進行處理。

  • $userdata :可選,額外的參數,會作為第二個參數傳遞給回調函數。

示例

 <span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-string">'apple'</span></span><span> =&gt; </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'banana'</span></span><span> =&gt; </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">'cherry'</span></span><span> =&gt; </span><span><span class="hljs-number">4</span></span><span>];
</span><span><span class="hljs-title function_ invoke__">array_walk</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>, function (&amp;</span><span><span class="hljs-variable">$value</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-variable">$value</span></span><span> * </span><span><span class="hljs-number">2</span></span><span>;
});
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>);
</span></span>

輸出

 <span><span>Array
(
    [</span><span><span class="hljs-meta">apple</span></span><span>] =&gt; </span><span><span class="hljs-number">4</span></span><span>
    [</span><span><span class="hljs-meta">banana</span></span><span>] =&gt; </span><span><span class="hljs-number">6</span></span><span>
    [</span><span><span class="hljs-meta">cherry</span></span><span>] =&gt; </span><span><span class="hljs-number">8</span></span><span>
)
</span></span>

這個例子中, array_walk會遍歷數組中的每個元素,並將每個元素的值乘以2。

三、結合使用array_fill_keysarray_walk進行數據批量處理

在實際開發中,常常需要先初始化一個帶有固定值的數組,再對這些值進行批量處理。我們可以通過結合使用array_fill_keysarray_walk來實現這種需求。

實際案例:假設我們有一個數組,表示用戶的訂單信息,其中包含用戶ID 和其購買商品的數量。我們想要初始化一個包含所有用戶ID 的數組,初始的值為0(表示初始購買數量),然後通過array_walk來更新每個用戶的購買數量。

示例代碼

 <span><span><span class="hljs-comment">// 用戶ID列表</span></span><span>
</span><span><span class="hljs-variable">$user_ids</span></span><span> = [</span><span><span class="hljs-number">101</span></span><span>, </span><span><span class="hljs-number">102</span></span><span>, </span><span><span class="hljs-number">103</span></span><span>, </span><span><span class="hljs-number">104</span></span><span>];

</span><span><span class="hljs-comment">// 初始化數組,所有用戶的购买数量为0</span></span><span>
</span><span><span class="hljs-variable">$order_data</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_fill_keys</span></span><span>(</span><span><span class="hljs-variable">$user_ids</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>);

</span><span><span class="hljs-comment">// 假设这是用戶购买商品的记录,每个数组项表示用戶ID及其購買數量</span></span><span>
</span><span><span class="hljs-variable">$purchases</span></span><span> = [
    [</span><span><span class="hljs-number">101</span></span><span>, </span><span><span class="hljs-number">3</span></span><span>],
    [</span><span><span class="hljs-number">102</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>],
    [</span><span><span class="hljs-number">103</span></span><span>, </span><span><span class="hljs-number">2</span></span><span>],
    [</span><span><span class="hljs-number">101</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>],
    [</span><span><span class="hljs-number">104</span></span><span>, </span><span><span class="hljs-number">4</span></span><span>]
];

</span><span><span class="hljs-comment">// 使用 array_walk 處理訂單數據,更新用戶的购买数量</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$purchases</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$purchase</span></span><span>) {
    </span><span><span class="hljs-variable">$user_id</span></span><span> = </span><span><span class="hljs-variable">$purchase</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>];
    </span><span><span class="hljs-variable">$quantity</span></span><span> = </span><span><span class="hljs-variable">$purchase</span></span><span>[</span><span><span class="hljs-number">1</span></span><span>];

    </span><span><span class="hljs-comment">// 通过回调函数更新对应用戶的购买数量</span></span><span>
    </span><span><span class="hljs-title function_ invoke__">array_walk</span></span><span>(</span><span><span class="hljs-variable">$order_data</span></span><span>, function (&amp;</span><span><span class="hljs-variable">$value</span></span><span>, </span><span><span class="hljs-variable">$key</span></span><span>) </span><span><span class="hljs-keyword">use</span></span><span> ($</span><span><span class="hljs-title">user_id</span></span><span>, $</span><span><span class="hljs-title">quantity</span></span><span>) {
        </span><span><span class="hljs-title">if</span></span><span> ($</span><span><span class="hljs-title">key</span></span><span> == $</span><span><span class="hljs-title">user_id</span></span><span>) {
            $</span><span><span class="hljs-title">value</span></span><span> += $</span><span><span class="hljs-title">quantity</span></span><span>;
        }
    });
}

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$order_data</span></span><span>);
</span></span>

輸出

 <span><span>Array
(
    [</span><span><span class="hljs-meta">101</span></span><span>] =&gt; </span><span><span class="hljs-number">4</span></span><span>
    [</span><span><span class="hljs-meta">102</span></span><span>] =&gt; </span><span><span class="hljs-number">5</span></span><span>
    [</span><span><span class="hljs-meta">103</span></span><span>] =&gt; </span><span><span class="hljs-number">2</span></span><span>
    [</span><span><span class="hljs-meta">104</span></span><span>] =&gt; </span><span><span class="hljs-number">4</span></span><span>
)
</span></span>

四、總結

在本文中,我們詳細介紹了PHP 中array_fill_keysarray_walk兩個數組函數的使用方法。通過array_fill_keys我們可以快速創建一個鍵名固定的數組,並為每個鍵指定相同的初始值。而通過array_walk我們可以遍歷數組並對數組中的每個元素進行批量處理。

結合這兩個函數,我們可以非常高效地對數據進行批量操作,特別適合需要初始化數據並進行更新或處理的場景。通過實例​​化具體的業務場景,如訂單數據的處理,可以幫助更好地理解如何在實際項目中運用這些函數。