You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按数组键后缀分组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);

代码说明

  1. 提前初始化目标数组结构,直接跳过不需要的submit项
  2. 用正则表达式提取键名末尾的数字后缀,作为关联依据
  3. 分别处理两类键:遇到checklist时创建子数组存入基础数据,遇到result_audit时找到同后缀的子数组补充数据
  4. 通过suffix - 1将数字后缀(1、2、3...)转换为从0开始的数组索引,完全匹配你期望的结构

内容的提问来源于stack exchange,提问作者user22249320

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 22:41:20