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

如何用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>';

逻辑说明

  1. 声明空数组$groupedData存储最终分组结果
  2. 遍历原数组的每个对象:
    • 提取对象的product_name作为分组键$key
    • 检查$groupedData中是否存在该键对应的子数组,不存在则初始化空数组
    • 将当前对象追加到对应子数组中
  3. 最终$groupedData会自动按product_name完成分组,新增的product_name值会自动生成对应分组,无需修改代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:45:43