【发布时间】:2022-01-18 11:13:56
【问题描述】:
我有从 mongodb 到数组的数据,我想处理返回数据以按日期和其他值拆分它,这是我目前得到的结果,我需要一些帮助
<?php
$stats=array(
array("source"=>501,"status"=>"answered","dest"=>"100","date"=>"2022-17-01"),
array("source"=>501,"status"=>"noAnswer","dest"=>"120","date"=>"2022-17-01"),
array("source"=>501,"status"=>"answered","dest"=>"100","date"=>"2022-18-01"),
array("source"=>502,"status"=>"answered","dest"=>"120","date"=>"2022-17-01"),
array("source"=>502,"status"=>"answered","dest"=>"130","date"=>"2022-17-01"),
array("source"=>502,"status"=>"answered","dest"=>"110","date"=>"2022-18-01")
);
$new1 = array();
$answer = 0;
$noanswer = 0;
$lastsrc = '';
$lastdate = '';
$dest=0;
foreach ($stats as $new) {
$src = $new['source'];
$date = $new['date'];
if ( $lastsrc == $src && $lastdate == $date ) {
$dest++;
if($new['status'] == 'answered'){ $answer++; }
if($new['status'] == 'noanswer'){ $noanswer++;}
$new1[] = array('source' => $src,
'date' => $date,
'ans' => $answer,
'nonans' => $noanswer,
'dest' => $dest );
} else if ( $lastsrc == $src && $lastdate != $date ) {
$dest++;
if($new['status'] == 'answered'){ $answer++;}
if($new['status'] == 'noanswer'){ $noanswer++;}
$new1[] = array('source' => $src,
'date' => $date,
'ans' => $answer,
'nonans' => $noanswer,
'dest' => $dest );
} else {
$dest++;
if($new['status'] == 'answered'){ $answer++; }
if($new['status'] == 'noanswer'){ $noanswer++;}
$new1[] = array('source' => $src,
'date' => $date,
'ans' => $answer,
'nonans' => $noanswer,
'dest' => $dest );
$lastsrc = $src;
$lastdate = $date;
}
}
print_r($new1);
?>
我试图实现的是按日期和源拆分数据,所以如果在 foreach 循环中我找到相同的源和相同的日期,那么我修改数组而不是创建新数组,如果相反则创建新的数组
我试图得到的结果是:
array("source"=>501,"ans"=>"1","noans" => 0,"dest"=>1,"date"=>"2022-17-01"),
array("source"=>501,"ans"=>"1","noAnswer" => 1,"dest"=>2,"date"=>"2022-18-01"),
array("source"=>502,"ans"=>"2","noans" => 0,"dest"=>2,"date"=>"2022-17-01"),
array("source"=>502,"ans"=>"1","noans" => 0,"dest"=>1,"date"=>"2022-18-01")
我不确定它是否正确,任何帮助将不胜感激,谢谢
【问题讨论】:
-
错字/拼写错误!
if($new['status'] == 'asnwered') -
不知道
dest应该是什么,但在你的这部分逻辑中,你似乎将它增加了两次} else if ( $lastsrc == $src && $lastdate != $date ) {是吗?? -
我修复了拼写,我正在寻找的结果是创建一个新数组,但拆分为源和日期,并计算 dest 的数量,回答者和未回答者,所以我得到每个来源每个日期并计算结果类似于问题中的示例,再次感谢 RiggsFolly
-
dest 是目的地 :)
-
您如何在输出中获得
"noAnswer",没有任何代码将其放入$new1