PHP如何确保关联数组包含P/U/X/W指定键并赋值?
解决PHP数组统计缺失键的问题
你的问题核心是确保目标键(P、U、X、W)无论是否在输入数组中出现,最终返回的数组都包含这些键并赋予默认值0。当前函数的问题是只统计了输入中存在的code,没出现的键直接被忽略了,我们可以通过先初始化目标数组的方式来解决。
修改后的函数代码
function convertJS($inputArray) { // 初始化包含所有目标键的数组,默认值为0 $tmp = ['P' => 0, 'U' => 0, 'X' => 0, 'W' => 0]; foreach ($inputArray as $item) { $code = $item['code']; // 只统计我们关心的code,避免引入其他无关键 if (array_key_exists($code, $tmp)) { $tmp[$code] += 1; } } return $tmp; }
代码解释
- 初始化目标数组:先创建一个包含
P、U、X、W的数组,每个键的初始值设为0,这样即使输入中没有对应的code,最终数组也会保留这些键。 - 遍历统计:遍历输入数组时,先取出当前项的
code,判断这个code是否在我们的目标数组中(避免统计无关的code),如果存在就将对应值加1。 - 返回结果:最后返回的数组必然包含所有目标键,不存在的code对应值保持初始的0,完全符合你期望的输出格式。
额外优化(可选)
如果你的目标键列表(P、U、X、W)需要灵活修改,可以把它抽成一个变量,这样后续维护更方便:
function convertJS($inputArray) { $lookup = ['P','U','X','W']; // 从lookup数组生成初始统计数组,默认值0 $tmp = array_fill_keys($lookup, 0); foreach ($inputArray as $item) { $code = $item['code']; if (in_array($code, $lookup)) { $tmp[$code] += 1; } } return $tmp; }
用array_fill_keys可以快速从键列表生成带默认值的数组,不用手动逐个写键值对,适合键数量较多的场景。
内容的提问来源于stack exchange,提问作者user9191816
相关产品推荐
相关产品推荐

