当内部有另一个foreach时,Php不是循环
我已经厌倦了找出为什么代码没有在foreach中循环。第一个循环是从我使用的数据库中提取人名,而这个循环像往常一样工作。第二个循环我测试他们每个人在一个月内所做的全部动作,所以我每个月使用一个foreach循环。但问题就在这里。因为没有线索,我无法使它再次循环 这是我的密码:当内部有另一个foreach时,Php不是循环,php,loops,foreach,Php,Loops,Foreach,我已经厌倦了找出为什么代码没有在foreach中循环。第一个循环是从我使用的数据库中提取人名,而这个循环像往常一样工作。第二个循环我测试他们每个人在一个月内所做的全部动作,所以我每个月使用一个foreach循环。但问题就在这里。因为没有线索,我无法使它再次循环 这是我的密码: error_reporting(E_ALL); $thisYear=intval(date("Y")); for($i=1;$i<13;$i++){ $i=sprintf("%02d",$i); $
error_reporting(E_ALL);
$thisYear=intval(date("Y"));
for($i=1;$i<13;$i++){
$i=sprintf("%02d",$i);
$monArr[]=$i;
}
//select all team members
$sql_sTeam=mysqli_query($con,"select * from TEAMNAMES order by fname asc");
$result=array();
while($rec_sTeam=mysqli_fetch_array($sql_sTeam)){
$rows['name']=$rec_sTeam['sale_fname'];//sale name
foreach($monArr as $key=>$val){
//$rows['data'][]=(int)$key;
$mon=intval($val);
//n action each member\
$sql_mLog=mysqli_query($con,"select * from mail_log where mlog_sid='$rec_sTeam[imap_sid]' and year(mlog_dtime)='$thisYear' and month(mlog_dtime)='$mon'");
$num_mLog=mysqli_num_rows($sql_mLog);
$rows['data'][] =(int)$num_mLog;//(int) will remove double qoutes around numbers
}//foreach
array_push($result,$rows);
}//while
echo json_encode($result);
请带我离开这里,因为我被困了好几个小时。
关于,有任何MySQL错误吗?在这方面:
$sql_mLog=mysqli_query($con,"select * from mail_log
where mlog_sid='$rec_sTeam[imap_sid]' and
year(mlog_dtime)='$thisYear' and month(mlog_dtime)='$mon'");
为了添加数组值或使用大括号,您需要停止字符串。。。像这样:
$sql_mLog=mysqli_query($con,"select * from mail_log
where mlog_sid='".$rec_sTeam[imap_sid]."' and
year(mlog_dtime)='$thisYear' and month(mlog_dtime)='$mon'");
或
例如:
$a = array("name"=>"predte4a");
echo "My name is: $a['name']";
// will echo My name is array()['name']
echo "My name is: {$a['name']}";
//will echo My name is predte4a
不要忘记关联数组键中的引号,这里是您正在寻找的解决方案:
error_reporting(E_ALL);
$thisYear = intval(date("Y"));
for($i = 1; $i < 13; $i++){
$i = sprintf("%02d",$i);
$monArr[] = $i;
}
//select all team members
$sql_sTeam = mysqli_query($con,"select * from TEAMNAMES order by fname asc");
$result=array();
while($rec_sTeam=mysqli_fetch_array($sql_sTeam)){
$row = array();
$row['name']=$rec_sTeam['sale_fname'];//sale name
$row['data'] = array();
foreach($monArr as $key=>$val){
$mon=intval($val);
//n action each member\
$sql_mLog=mysqli_query($con,"select * from mail_log where mlog_sid='$rec_sTeam[imap_sid]' and year(mlog_dtime)='$thisYear' and month(mlog_dtime)='$mon'");
$num_mLog=mysqli_num_rows($sql_mLog);
$row['data'][] =(int)$num_mLog;//(int) will remove double qoutes around numbers
}//foreach
$result[] = $row;
}//while
echo json_encode($result)
错误报告(E_ALL);
$thisYear=intval(日期(“Y”);
对于($i=1;$i<13;$i++){
$i=sprintf(“%02d”,$i);
$monArr[]=$i;
}
//选择所有团队成员
$sql\u sTeam=mysqli\u query($con,“由fname asc从TEAMNAMES订单中选择*);
$result=array();
而($rec\u sTeam=mysqli\u fetch\u数组($sql\u sTeam)){
$row=array();
$row['name']=$rec_sTeam['sale_fname'];//销售名称
$row['data']=array();
foreach($monArr作为$key=>$val){
$mon=intval($val);
//n每个成员的行动\
$sql\u mLog=mysqli\u query($con,“从邮件日志中选择*,其中mLog\u sid='$rec\u sTeam[imap\u sid]'和年份(mLog\u dtime)='$thisYear'和月份(mLog\u dtime)='$mon';
$num\u mLog=mysqli\u num\u行($sql\u mLog);
$row['data'][=(int)$num_mLog;//(int)将删除数字周围的双QOUTE
}//弗雷奇
$result[]=$row;
}//当
echo json_编码($result)
我不知道为什么在$result
中没有4个元素。但是还有一个bug:您需要在while
循环的每次迭代开始时设置$rows=array()。否则,您将继续附加到同一数组的数据
元素。Barmar,您的意思是我应该将$rows=array()放在while循环的正下方?是的,就在$rows['name']=…
Predte4a之前,谢谢您的回复。但完全没有错误(其实这并不是一个错误,只是你会得到不同的字符串:这是有效的John。array_push($result,$rows)是否导致了问题?请给我上一些课。不!array_push与[]做的事情完全一样。根据文档“注意:如果你使用array_push()向数组添加一个元素,最好使用$array[]=因为这样就不会有调用函数的开销。”因此,如果只有一个元素要推送,请始终选择[]。神奇的代码是:$row=array();始终确保在每个循环中初始化数组/对象,然后将其推送到数组中。约翰,这是一本圣经!非常感谢您上了一堂简短但有价值的课。
$a = array("name"=>"predte4a");
echo "My name is: $a['name']";
// will echo My name is array()['name']
echo "My name is: {$a['name']}";
//will echo My name is predte4a
error_reporting(E_ALL);
$thisYear = intval(date("Y"));
for($i = 1; $i < 13; $i++){
$i = sprintf("%02d",$i);
$monArr[] = $i;
}
//select all team members
$sql_sTeam = mysqli_query($con,"select * from TEAMNAMES order by fname asc");
$result=array();
while($rec_sTeam=mysqli_fetch_array($sql_sTeam)){
$row = array();
$row['name']=$rec_sTeam['sale_fname'];//sale name
$row['data'] = array();
foreach($monArr as $key=>$val){
$mon=intval($val);
//n action each member\
$sql_mLog=mysqli_query($con,"select * from mail_log where mlog_sid='$rec_sTeam[imap_sid]' and year(mlog_dtime)='$thisYear' and month(mlog_dtime)='$mon'");
$num_mLog=mysqli_num_rows($sql_mLog);
$row['data'][] =(int)$num_mLog;//(int) will remove double qoutes around numbers
}//foreach
$result[] = $row;
}//while
echo json_encode($result)