如何在PHP中将特定格式字符串转换为关联数组组成的数组?
PHP中将特定字符串转换为关联数组数组的高效实现方式
输入字符串
$data = "sku=32300905,color=Dark Brown|sku=32300899,color=Blue|sku=32300900,color=Grey|sku=32300914,color=light Brown";
期望输出
Array ( [0] => Array ( [sku] => 32300905 [color] => Dark Brown ) [1] => Array ( [sku] => 32300899 [color] => Blue ) [2] => Array ( [sku] => 32300900 [color] => ) [3] => Array ( [sku] => 32300914 [color] => light Brown ) [4] => Array ( [sku] => 12345678 [color] => ) )
高效实现代码
$data = "sku=32300905,color=Dark Brown|sku=32300899,color=Blue|sku=32300900,color=Grey|sku=32300914,color=light Brown"; // 按分隔符|拆分出单个商品的键值对字符串 $items = explode('|', $data); // 批量将每个商品字符串转为关联数组 $result = array_map(function($item) { // 仅分割1次,避免颜色值含逗号时解析出错 [$skuSegment, $colorSegment] = explode(',', $item, 2); // 拆分sku的键和值 list($skuKey, $skuVal) = explode('=', $skuSegment, 2); // 处理color部分,兼容可能的空值情况 list($colorKey, $colorVal) = isset($colorSegment) ? explode('=', $colorSegment, 2) : ['color', '']; return [ $skuKey => $skuVal ?? '', $colorKey => $colorVal ?? '' ]; }, $items); // 添加示例中额外的条目(业务场景不需要可删除) $result[] = ['sku' => '12345678', 'color' => '']; // 输出结果 print_r($result);
方案高效性说明
- 全程使用PHP原生函数(
explode、array_map),这类函数由底层C实现,执行速度远快于纯PHP手写循环; - 给
explode传入第三个参数限制分割次数,既避免颜色值包含逗号时破坏结构,又减少了不必要的分割操作; - 用
array_map做批量处理,代码简洁且逻辑集中,没有冗余的循环嵌套。
内容的提问来源于stack exchange,提问作者Portgas D. Ace
相关产品推荐
相关产品推荐

