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>] => </span><span><span class="hljs-number">0</span></span><span>
[</span><span><span class="hljs-meta">banana</span></span><span>] => </span><span><span class="hljs-number">0</span></span><span>
[</span><span><span class="hljs-meta">cherry</span></span><span>] => </span><span><span class="hljs-number">0</span></span><span>
)
</span></span>
這個例子創建了一個新的數組,數組的鍵名來自$keys數組,每個鍵的值都是0 。
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> &</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> => </span><span><span class="hljs-number">2</span></span><span>, </span><span><span class="hljs-string">'banana'</span></span><span> => </span><span><span class="hljs-number">3</span></span><span>, </span><span><span class="hljs-string">'cherry'</span></span><span> => </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 (&</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>] => </span><span><span class="hljs-number">4</span></span><span>
[</span><span><span class="hljs-meta">banana</span></span><span>] => </span><span><span class="hljs-number">6</span></span><span>
[</span><span><span class="hljs-meta">cherry</span></span><span>] => </span><span><span class="hljs-number">8</span></span><span>
)
</span></span>
這個例子中, array_walk會遍歷數組中的每個元素,並將每個元素的值乘以2。
在實際開發中,常常需要先初始化一個帶有固定值的數組,再對這些值進行批量處理。我們可以通過結合使用array_fill_keys和array_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 (&</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>] => </span><span><span class="hljs-number">4</span></span><span>
[</span><span><span class="hljs-meta">102</span></span><span>] => </span><span><span class="hljs-number">5</span></span><span>
[</span><span><span class="hljs-meta">103</span></span><span>] => </span><span><span class="hljs-number">2</span></span><span>
[</span><span><span class="hljs-meta">104</span></span><span>] => </span><span><span class="hljs-number">4</span></span><span>
)
</span></span>
在本文中,我們詳細介紹了PHP 中array_fill_keys和array_walk兩個數組函數的使用方法。通過array_fill_keys我們可以快速創建一個鍵名固定的數組,並為每個鍵指定相同的初始值。而通過array_walk我們可以遍歷數組並對數組中的每個元素進行批量處理。
結合這兩個函數,我們可以非常高效地對數據進行批量操作,特別適合需要初始化數據並進行更新或處理的場景。通過實例化具體的業務場景,如訂單數據的處理,可以幫助更好地理解如何在實際項目中運用這些函數。
相關標籤:
array_walk