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

如何避免PHP数组循环插入时重复合并数据,解决值重复追加问题

PHP数组循环追加数据不重置问题解决方案

平心而论,我不确定Array Push是不是实现我需求的最佳方法,毕竟它在脚本的B部分是可以正常运行的。

我写了一个ForEach循环来生成两个存储数据的数组。其中$ee2[]数组运行符合预期:它从数据库拉取数据,不会产生重复数据。但反过来$eRD[]数组似乎只会往数组末尾追加数据,而不会在每次循环迭代时重置数组。

有没有更合适的实现方法?我查了很多相关文章都没找到适配的方案,也试过改用对象实现,但直接把代码跑崩了,有人能给点建议吗?

已尝试的无效方案

  • 我尝试在forEach循环上方将$eRD[]声明为数组,没有成功,依然只会追加数据。
  • 我尝试将$ee2[]移到$eRD[]对应的forEach循环内部,导致运行逻辑出现异常。
  • 我尝试用$eRD1、$eRD2这类独立变量重构数据输出,但这个过程太过繁琐,可操作性低。
  • 我尝试使用$eRD[$rD->name]的写法,但似乎只会读取第一个实例的值并全局使用,而$rD->name在每次迭代中都是唯一的。

$eRD[]对应的forEach循环的作用是为查询到的数据匹配对应的标题和答案。

问题代码

$quickQues = new QUICKQUES\Init();
if(!empty($engs)){
                 foreach($engs as $e){
                     
                     $rawData = json_decode($e['rawSubmittedData']);
                     $rawD = $rawData->data;
                     
                     foreach($rawD as $rD){
                         
                         $findModule = $quickQues->thisElementByID($rD->name);
            
                        if(!empty($findModule)){
                            $moduleTitle = json_decode($findModule['pqfeElement']);
                            $moduleTitleA = $moduleTitle->qeTitle;
                            $eRD[] = array(
                             'name'=>$moduleTitleA,
                             'value'=>$rD->value
                             );
                             $moduleTitle = "";
                             $moduleTitleA = "";
                        }else{
                            
                        }
                         
                         
                     }
                     
                     $ee2[] = array(
                         'eSPY'=>$e['eSPY'],
                         'submissionElementType'=>$e['submissionElementType'],
                         'submittedBy'=>$e['submittedBy'],
                         'rawSubmittedData'=>$eRD,
                         'isInternalForm'=>$e['isInternalForm'],
                         'eSpyStatus'=>$e['eSpyStatus'],
                         'lastUpdated'=>$e['lastUpdated'],
                         'formName'=>$e['formName']
                         );
                     
                 }
             }

echo json_encode(
        array(  
         array(
            'response'=>'hFetch',
            ),
           array(
            'engagements'=>array(
                'total'=>$count,
                'info'=>$ee2,
                'cEE'=>count($ee2)
                ),
            ) ) );

最终解决方案

下面这个方法完美解决了问题,希望能帮到未来遇到同样问题的开发者:

if (!isset($eRD[$rD->name])) {
    $eRD[$rD->name]['items'] = [];
}
$eRD[$rD->name]['items'][] = array(
         'name'=>$moduleTitleA,
         'value'=>$rD->value
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:06:03