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