Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当内部有另一个foreach时,Php不是循环_Php_Loops_Foreach - Fatal编程技术网

当内部有另一个foreach时,Php不是循环

当内部有另一个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); $

我已经厌倦了找出为什么代码没有在foreach中循环。第一个循环是从我使用的数据库中提取人名,而这个循环像往常一样工作。第二个循环我测试他们每个人在一个月内所做的全部动作,所以我每个月使用一个foreach循环。但问题就在这里。因为没有线索,我无法使它再次循环

这是我的密码:

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)