PHP如何基于width列值将二维数组拆分为前轮后轮两个独立数组
实现方案
你可以通过JSON解码+遍历分组+JSON编码的方式完成需求,示例代码如下:
<?php // 原始JSON字符串,建议提前移除每个对象末尾多余的逗号,避免低版本PHP解析失败 $arr = '[ { "id": 4667, "brand": "Michelin", "model": "Pilot Super Sport", "width": "255", "height": "35", "rim": "19" }, { "id": 4668, "brand": "Michelin", "model": "Pilot Super Sport", "width": "275", "height": "35", "rim": "19" }, { "id": 4669, "brand": "Pirelli", "model": "Zero", "width": "255", "height": "35", "rim": "19" }, { "id": 4670, "brand": "Pirelli", "model": "Zero", "width": "275", "height": "35", "rim": "19" }]'; // 解码为PHP数组,第二个参数true表示返回关联数组,传false则返回对象 $tireData = json_decode($arr, true); // 初始化分组 $front = []; $rear = []; // 按width字段分组 foreach ($tireData as $item) { if ($item['width'] === '255') { $front[] = $item; } elseif ($item['width'] === '275') { $rear[] = $item; } } // 编码为带格式化的JSON字符串,JSON_UNESCAPED_UNICODE保证中文不转码(此处无中文也可以保留) $frontJson = json_encode($front, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); $rearJson = json_encode($rear, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); ?>
扩展适配方案
如果后续需要适配更多width规格,不需要固定判断255/275,可以动态按width值分组:
$groups = []; foreach ($tireData as $item) { $groups[$item['width']][] = $item; } // 此时 $groups['255'] 对应前轮数组,$groups['275'] 对应后轮数组,新增其他width规格也会自动生成对应分组
注意事项
你提供的原始JSON字符串中每个对象的最后一个字段(rim)后多了多余的逗号,PHP 7.3以下版本解析这类JSON会返回null,建议提前处理移除多余逗号,或者在json_decode时添加JSON_PARTIAL_OUTPUT_ON_ERROR参数忽略小格式错误。
内容的提问来源于stack exchange,提问作者Haja
相关产品推荐
相关产品推荐

