如何按数组键后缀分组PHP数组并输出至UI?
根据数组键后缀分组数组值并重组结构
原始数组
Array ( [checklist1] => major [result_audit1] => 1 [checklist2] => minor [result_audit2] => 2 [checklist3] => pico [result_audit3] => 3 [checklist4] => goodpoints [result_audit4] => 4 [submit] => Submit Now )
尝试的代码(结果不符合预期)
foreach($n_data as $key => $data) { $array['checklist'][$i] = array( 'selected' => $n_data[$key], 'result_audit' => $n_data[$key] ); $i++; }
期望的数组结构
Array ( [checklist] => Array ( [0] => Array ( [selected] => major [result_audit] => 1 [origin] => checklist1 ) [1] => Array ( [selected] => minor [result_audit] => 2 [origin] => checklist2 ) // 后续项以此类推 ) )
解决方案
核心思路是提取每个键的数字后缀,将同后缀的checklist和result_audit对应关联:
$n_data = [ 'checklist1' => 'major', 'result_audit1' => 1, 'checklist2' => 'minor', 'result_audit2' => 2, 'checklist3' => 'pico', 'result_audit3' => 3, 'checklist4' => 'goodpoints', 'result_audit4' => 4, 'submit' => 'Submit Now' ]; $grouped = ['checklist' => []]; foreach ($n_data as $key => $value) { // 跳过无关的submit项 if ($key === 'submit') continue; // 提取键末尾的数字后缀 preg_match('/\d+$/', $key, $matches); if (empty($matches)) continue; $suffix = $matches[0]; // 处理checklist开头的键,初始化子数组 if (str_starts_with($key, 'checklist')) { $grouped['checklist'][$suffix - 1] = [ 'selected' => $value, 'origin' => $key ]; } // 处理result_audit开头的键,补充对应子数组的数据 elseif (str_starts_with($key, 'result_audit')) { if (isset($grouped['checklist'][$suffix - 1])) { $grouped['checklist'][$suffix - 1]['result_audit'] = $value; } } } // 输出重组后的数组 print_r($grouped);
代码说明
- 提前初始化目标数组结构,直接跳过不需要的
submit项 - 用正则表达式提取键名末尾的数字后缀,作为关联依据
- 分别处理两类键:遇到
checklist时创建子数组存入基础数据,遇到result_audit时找到同后缀的子数组补充数据 - 通过
suffix - 1将数字后缀(1、2、3...)转换为从0开始的数组索引,完全匹配你期望的结构
内容的提问来源于stack exchange,提问作者user22249320
相关产品推荐
相关产品推荐

