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

PHP中如何编写函数将特定格式数组整理为分类键值对结构?

解决PHP动态值数组的分组转换问题

嘿,这个需求其实挺常见的,咱们可以通过简单的数组遍历和字符串分割来实现。我给你写个直观的实现方案,完全符合你的需求:

实现思路

  1. 先创建一个空数组用来存储最终的分组结果
  2. 遍历原数组中的每一项,把每个元素按-分割成类别键和对应数值
  3. 把相同类别键的数值收集到同一个子数组里
  4. 最后返回整理好的数组

代码示例

function groupDynamicValues(array $inputArray): array {
    // 初始化结果数组
    $result = [];
    
    foreach ($inputArray as $item) {
        // 用"-"分割,限制只分割1次,避免键名里包含"-"的情况出错
        [$category, $value] = explode('-', $item, 2);
        
        // 如果该类别还没在结果数组里,先初始化一个空数组
        if (!isset($result[$category])) {
            $result[$category] = [];
        }
        
        // 把数值添加到对应类别的数组中,这里转成整数类型,按需也可保留字符串
        $result[$category][] = (int)$value;
    }
    
    return $result;
}

// 测试你的输入数组
$input = [
    'product_cat-24',
    'style_cat-97',
    'style_cat-98',
    'stone_count_cat-110',
    'style_cat-100',
    'style_cat-104',
    'stone_count_cat-109',
    'stone_count_cat-111'
];

$output = groupDynamicValues($input);
print_r($output);

运行结果

执行上面的代码后,输出的结果就是你想要的结构:

Array
(
    [product_cat] => Array
        (
            [0] => 24
        )

    [style_cat] => Array
        (
            [0] => 97
            [1] => 98
            [2] => 100
            [3] => 104
        )

    [stone_count_cat] => Array
        (
            [0] => 110
            [1] => 109
            [2] => 111
        )

)

额外说明

我在代码里用了explode('-', $item, 2),第三个参数2是为了限制分割次数——万一你的类别键里也包含-(比如custom-category-123),这样只会分割第一次出现的-,避免把键名拆坏。如果你的业务里确定键名不会有-,也可以去掉第三个参数,但加上会让代码更健壮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:37:01