如何用foreach循环按product_name分组PHP stdClass对象数组
按product_name分组stdClass对象数组
现有如下包含stdClass对象的PHP数组:
$data[] = new stdClass; $data[0]->product_name = '1'; $data[0]->random_value = 'first'; $data[1]->product_name = '2'; $data[1]->random_value = 'second'; $data[2]->product_name = '2'; $data[2]->random_value = 'third'; $data[3]->product_name = '1'; $data[3]->random_value = 'fourth'; $data[4]->product_name = '3'; $data[4]->random_value = 'fifth';
需求:
- 遍历数组,将
product_name相同的对象放入同一个子数组 - 无匹配的对象单独放入子数组,后续新增相同
product_name的对象可直接加入对应子数组 - 继续使用foreach循环实现,分组逻辑需动态适配未来新增的
product_name值
解决方案代码
// 初始化分组结果数组 $groupedData = []; foreach ($data as $obj) { // 用product_name作为分组的键名 $key = $obj->product_name; // 若当前分组不存在,先创建空数组 if (!isset($groupedData[$key])) { $groupedData[$key] = []; } // 将对象推入对应分组 $groupedData[$key][] = $obj; } // 输出分组结果 echo '<pre id="vardump">'; var_dump($groupedData); echo '</pre>';
逻辑说明
- 声明空数组
$groupedData存储最终分组结果 - 遍历原数组的每个对象:
- 提取对象的
product_name作为分组键$key - 检查
$groupedData中是否存在该键对应的子数组,不存在则初始化空数组 - 将当前对象追加到对应子数组中
- 提取对象的
- 最终
$groupedData会自动按product_name完成分组,新增的product_name值会自动生成对应分组,无需修改代码
内容的提问来源于stack exchange,提问作者Sigurd Mazanti
相关产品推荐
相关产品推荐

