如何避免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
相关产品推荐
相关产品推荐

