如果没有结果,则跳过PHP foreach循环

如果没有结果,则跳过PHP foreach循环,php,mysql,foreach,Php,Mysql,Foreach,如果foreach循环不包含任何值,我很难让它跳过值。这是我的密码。现在,它以14天为间隔循环遍历2016-01-04的值,并返回员工在该工资期内的工作天数以及工资和工时。但是,如果该员工没有在该支付期间工作,我希望用户不能看到该期间的日期范围。我试着使用continue;和打破;但它只是停留在第一个结果 这是我看到的。通知- 2016年1月18日至1月31日 它没有显示任何用处。我怎样才能在PHP中摆脱它呢?谢谢 发薪期 二月一日 -2016年2月14日 $200.008小时$166.00净

如果foreach循环不包含任何值,我很难让它跳过值。这是我的密码。现在,它以14天为间隔循环遍历2016-01-04的值,并返回员工在该工资期内的工作天数以及工资和工时。但是,如果该员工没有在该支付期间工作,我希望用户不能看到该期间的日期范围。我试着使用continue;和打破;但它只是停留在第一个结果

这是我看到的。通知-

2016年1月18日至1月31日

它没有显示任何用处。我怎样才能在PHP中摆脱它呢?谢谢

发薪期 二月一日 -2016年2月14日 $200.008小时$166.00净$200.008小时$166.00净$250.0010小时$207.50净工资总额$539.50总小时数:1月18日26日 -2016年1月31日 总工资:$0.00总工时:1月4日0 -2016年1月17日
$200.008小时$166.00净总工资:$166.00总小时:8如果您可以测试想要跳过的条件,您可以使用“continue”关键字转到foreach循环的下一次迭代

例如:

foreach($dates as $date) {
    if($date > $date_range) {
        continue; // 'skips', Goes back to the top of the foreach loop
    }

    // ... Do other things for values you didn't skip
}

如果可以测试要跳过的条件,则可以使用“continue”关键字转到foreach循环的下一次迭代

例如:

foreach($dates as $date) {
    if($date > $date_range) {
        continue; // 'skips', Goes back to the top of the foreach loop
    }

    // ... Do other things for values you didn't skip
}

通常,我会创建一些可怕的SQL查询,将您想要的行分组并返回,并将它们的周期和附加到末尾

不过,作为一个更简单的解决方案,您应该能够使用下面的代码跳过没有小时的时段。我用一个简单的数组对它进行了测试,但是它可能需要或者不需要一些调整来处理你的数组

$hoursForPeriod = array_reduce($rows, function($carry, $elem) use ($dt, $d2) {
    $startday = date('Y-m-d', strtotime($elem['start']));

    if ($startday >= $dt->format('Y-m-d') && $startday <= $d2->format('Y-m-d')) {
        $carry += $elem['hours'];
    }

    return $carry;
}, 0);

if($hoursForPeriod == 0)
    continue;

通常,我会创建一些可怕的SQL查询,将您想要的行分组并返回,并将它们的周期和附加到末尾

不过,作为一个更简单的解决方案,您应该能够使用下面的代码跳过没有小时的时段。我用一个简单的数组对它进行了测试,但是它可能需要或者不需要一些调整来处理你的数组

$hoursForPeriod = array_reduce($rows, function($carry, $elem) use ($dt, $d2) {
    $startday = date('Y-m-d', strtotime($elem['start']));

    if ($startday >= $dt->format('Y-m-d') && $startday <= $d2->format('Y-m-d')) {
        $carry += $elem['hours'];
    }

    return $carry;
}, 0);

if($hoursForPeriod == 0)
    continue;


谢谢你的帮助。我想我不能“继续”直到在第二个foreach循环中检查了$date_范围内的值。是否可以修改SQL查询以不返回0小时周期?从fishbone中选择小时数、数字、工资率、开始时间、id,其中用户=“$user”和小时数>0按开始顺序ASCYes。它现在没有得到0的结果。没有。我编辑了我的问题,以便您可以看到我的查询结果。谢谢,嗯。做ifarray\u sumarray\u列$rows如何,'hours'==0继续;在第一个foreach下?在你打印任何东西之前,这应该提前计算出这组行中的所有小时数。没有骰子。每圈有34个。这是所有行数小时的总和。谢谢你的帮助。我想我不能“继续”直到在第二个foreach循环中检查了$date_范围内的值。是否可以修改SQL查询以不返回0小时周期?从fishbone中选择小时数、数字、工资率、开始时间、id,其中用户=“$user”和小时数>0按开始顺序ASCYes。它现在没有得到0的结果。没有。我编辑了我的问题,以便您可以看到我的查询结果。谢谢,嗯。做ifarray\u sumarray\u列$rows如何,'hours'==0继续;在第一个foreach下?在你打印任何东西之前,这应该提前计算出这组行中的所有小时数。没有骰子。每圈有34个。它将所有行的时间相加。注意:未定义的变量:dt2 in。。。注意:未定义变量:d2 in。。。致命错误:在中调用空值上的成员函数格式…我想我可能不得不改天再讨论这个问题。谢谢你的帮助。对不起,我想把变量命名为$d2,而不是我答案中使用的$dt2部分。我现在已经修好了。这应该可以纠正您遇到的问题。这一行:$carry+=$elem*$dt;注意:类DateTime的对象无法转换为int。。。注意:类DateTime的对象无法转换为int。。。我需要将DateTime对象转换成整数。我想我必须为每个语句的第一个变量传递两个变量。如果每次都进入秒,我仍然会得到日期范围。注意:未定义变量:dt2 in。。。注意:未定义变量:d2 in。。。致命错误:在中调用空值上的成员函数格式…我想我可能不得不改天再讨论这个问题。谢谢你的帮助。对不起,我想把变量命名为$d2,而不是我答案中使用的$dt2部分。我现在已经修好了。这应该可以纠正您遇到的问题。这一行:$carry+=$elem*$dt;
注意:类DateTime的对象无法转换为int。。。注意:类DateTime的对象无法转换为int。。。我需要将DateTime对象转换成整数。我想我必须为每个语句的第一个变量传递两个变量。如果每次都进入第二秒,我仍然会得到日期范围。