PHP按Object->Title分组,将同组Info展示到单个div
按Title分组展示JSON数组数据的解决方案
你现在的问题是因为直接遍历每个对象就输出div,导致同Title的内容被拆分成了多个独立容器。解决的关键是先把数据按Title分组整理,再循环分组后的数据生成对应的div,PHP虽然没有专门的“一键分组”内置函数,但用基础的数组操作就能轻松实现。
具体步骤:
- 初始化一个空数组,用来存储分组后的数据(键为Title,值为该Title对应的所有Info集合)
- 遍历从JSON解码得到的对象数组,把每个符合条件(Title不是'Image')的Info归类到对应的Title下
- 最后遍历分组后的数组,为每个Title生成一个div,并输出该Title下的所有Info
修改后的完整代码:
// 初始化分组数组 $groupedData = []; while($row = sqlsrv_fetch_array($get_details)) { $a = $row['additionalInformation']; $b = json_decode($a); $c = $b->AdditonalInfo; // 第一步:先把数据按Title分组 foreach ($c as $d){ // 跳过Title为Image的条目 if($d->Title !== 'Image'){ $title = $d->Title; // 如果该Title还没在分组数组里,先初始化一个空数组 if (!isset($groupedData[$title])) { $groupedData[$title] = []; } // 把当前Info添加到对应Title的数组中 $groupedData[$title][] = $d->Info; } } } // 第二步:遍历分组后的数据,生成页面元素 foreach ($groupedData as $title => $infos) { echo '<div class="class">'; echo '<h2>' . htmlspecialchars($title) . '</h2>'; // 遍历当前Title下的所有Info,逐个输出p标签 foreach ($infos as $info) { echo '<p>' . htmlspecialchars($info) . '</p>'; } echo "</div>"; }
代码说明:
- 我添加了
htmlspecialchars()函数,用来防止XSS攻击,毕竟直接输出数据库/JSON里的内容有安全风险,这个是开发中的好习惯哦 - 分组数组
$groupedData的结构会变成类似:['Title1' => ['Info1', 'Info2'], 'Title2' => ['Info3']],这样后续循环就能轻松按Title生成独立的div - 把数据整理和页面输出分开,代码逻辑更清晰,也方便后续维护
内容的提问来源于stack exchange,提问作者Maria
相关产品推荐
相关产品推荐

