当前位置: 首页> 最新文章列表> 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 我们可以遍历数组并对数组中的每个元素进行批量处理。

结合这两个函数,我们可以非常高效地对数据进行批量操作,特别适合需要初始化数据并进行更新或处理的场景。通过实例化具体的业务场景,如订单数据的处理,可以帮助更好地理解如何在实际项目中运用这些函数。