我正在开展一个项目,我必须随机规划144名律师。这个计划是每个月。所以每个月的每一天都会有3-4名律师。这个计划将在每个月的开始时进行。这个计划必须是随机的,每个人都要平等接受。
我的想法是这样的:我第一次每天捡到四个人([144/31] = 4),剩下的20个人计划在5月1日至20日。有4个计划,每个律师都会选择参加哪个计划。在我的数据库中,我将每个选项存储在一个表中。例如,如果他选择计划1(称为politie_parchet_all
),他将从数据库中获得1个表。
问题出在这里......这段代码只运行if
子句,其余24人仍未选中。我认为不要退出if
条款,我不要知道为什么吗?
$str_date ="01-".$luna."-".$an;
$start_date = strtotime($str_date);
$end_date = strtotime('+1 month',$start_date);
$number_days = date("t",$start_date);
$nr_lawyer =number_lawyer($planificare);
while ($nr_lawyer >0)
{
$nr_lawyer =number_lawyer($planificare);
if($nr_lawyer > $number_days)
{
$nr = intval($nr_lawyer/$number_days);
while ($start_date < $end_date)
{
$time=date('Y-m-d',$start_date);
for ($i=1; $i<=$nr; $i++)
{
$time=date('Y-m-d',$start_date);
selectare_avocat($planificare,$time);
}
$start_date = strtotime('+1 days',$start_date);
}
}
else if($nr_lawyer < $number_days)
{
$str_date ="01-".$luna."-".$an;
$start_date = strtotime($str_date);
$end_date = strtotime('+'.number_lawyer($planificare).' days',$start_date);
echo date('Y-m-d',$end_date);
while ($start_date < $end_date)
{
$time=date('Y-m-d',$start_date);
selectare_avocat($planificare,$time);
$start_date = strtotime('+1 days',$start_date);
}
}
$nr_lawyer = number_lawyer($planificare);
}
selectare_avocat
是一个选择随机律师的函数,将此随机律师存储在generare_liste
表中并更新select = 1
select = 0
表示他可以被选中。如果选择了律师,那么在所有律师被选中之前,他们将不再被选中。
selectare_avocat()函数:&lt; - 此函数运行良好。
function selectare_avocat($planificare,$time) {
global $con;
$sql3="SELECT avocat.id from avocat WHERE avocat.select=0 AND avocat.".$planificare." = 1 AND avocat.id NOT IN (SELECT id_avocat FROM generare_liste WHERE `data` LIKE '{$time}') ORDER BY RAND() LIMIT 1";
$result3 = mysqli_query($con,$sql3);
$row=mysqli_fetch_array($result3);
$id = $row['id'];
$sql4="INSERT INTO generare_liste(id,id_avocat,planificare,data)VALUES(null,".$id.",'{$planificare}','{$time}')";
mysqli_query($con,$sql4);
$sql2="UPDATE `avocat` SET `select`=1 WHERE id={$id}";
mysqli_query($con,$sql2);
}
问题是这个脚本永远不会结束并且只是在if
条款上被阻止(因为在generare_lista
表中我只有124名律师之后)和剩下的20名必须接受的律师使用else
子句。
答案 0 :(得分:0)
我的建议是:
获取实际月份的天数=&gt; $ number_days = date(“t”,$ start_date); 初始化变量 $ cont = 1; 创建一个空数组 $ list = array(); 在数据数组中循环,直到它为空; 做 $ list [$ cont] =数组数据中的一些随机值,然后将其从数组数据中删除; 测试是否 $ cont大于$ number_days,然后将其变为1 增量 $续++;
这个例程适合任何律师。