PHP中如何编写函数将特定格式数组整理为分类键值对结构?
解决PHP动态值数组的分组转换问题
嘿,这个需求其实挺常见的,咱们可以通过简单的数组遍历和字符串分割来实现。我给你写个直观的实现方案,完全符合你的需求:
实现思路
- 先创建一个空数组用来存储最终的分组结果
- 遍历原数组中的每一项,把每个元素按
-分割成类别键和对应数值 - 把相同类别键的数值收集到同一个子数组里
- 最后返回整理好的数组
代码示例
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
相关产品推荐
相关产品推荐

