下面是我的php代码,它返回日期,直到条件为false为止:
<?php
$paid = 2000;
$monthly = 750;
$date_array = array("2016-07", "2016-09");
$bill_paid_array = array(750, 600);
$x=0;
do {
$found = false;
while (!$found) {
$date = date('2016'.'-'.'07'.'-d');
$time = strtotime($date);
$bill_month = date("Y-m", strtotime( ($x++)." month", $time));
$found = !in_array($bill_month,$date_array) ;
}
echo date($bill_month."-d") . "=> $monthly<br/>\n";
$paid -= $monthly;
if ($paid < $monthly) {
$monthly = $paid;
}
} while ($paid > 0);返回数据:
2016-08-16=> 750
2016-10-16=> 750
2016-11-16=> 500的工作原理:
此代码正在检查哪个月账单用户已从开始日期起支付。如果月份存在,那么下个月将显示,直到条件为false。
现在是:例如:开始日期是:2016-07-01和用户已经支付了2016-07和2016-09月账单(见$date_array)
现在用户正在支付2000,他的账单金额是750。所以这段代码显示的是后面的日期和金额。
返回数据:
2016-08-16=> 750
2016-10-16=> 750
2016-11-16=> 500我现在想要什么
现在,如果我再次支付了一个新的账单,750,那么按照上面的代码,这一行:date($bill_month."-d") . "=> $monthly<br/>\n";将显示给我2016-12-16日期:但是我不想要。我想展示一下:2016-11-16和250,2016-12-16和500。
注:我每个月都有$bill_paid_array,
更新:
$allBillMonth = mysqli_query($conn, "SELECT YEAR(bill_month) AS bill_year, MONTH(bill_month) AS bill_month, pay_amount FROM clients_pay_bill WHERE client_id = '$client_id' AND uid = '$uid' ");
$date_array = array();
$pay_amount_array = array();
while( $fetchAllBillMonth = mysqli_fetch_array($allBillMonth) ) {
$year = $fetchAllBillMonth['bill_year'];
$month = $fetchAllBillMonth['bill_month'];
$date_array[] = "$year-$month";
if($monthly_bill != $fetchAllBillMonth['pay_amount']) {
$flag = 0;
} else {
$flag =1;
}
$db_paid_amount = $fetchAllBillMonth['pay_amount'];
$pay_amount_array[] = "$year-$month => [$db_paid_amount, $flag]";
}输出:
Array
(
[0] => 2016-8 => [750.00, 1]
[1] => 2016-9 => [750.00, 1]
[2] => 2016-10 => [700.00, 0]
)发布于 2016-09-16 12:29:31
看看这个,我修改了$bill_paid_array,如果你有什么问题我会解释的
<?php
$paid = 2000;
$monthly = 750;
$date_array = array("2016-07", "2016-09");
$bill_paid_array = array("2016-07" => [750,1], "2016-09" => [600,0]);
$is_full_amount = 1;
$previous_month = 0;
$x=0;
do {
$found = false;
while (!$found) {
$date = date('2016'.'-'.'07'.'-d');
$time = strtotime($date);
$bill_month = date("Y-m", strtotime( ($x++)." month", $time));
if (in_array($bill_month,$date_array)){
if ($bill_paid_array["$bill_month"][1] == 0){
$found = true;
$previous_month = $monthly -$bill_paid_array["$bill_month"][0];
}
}else
$found = !in_array($bill_month,$date_array) ;
}
if ($previous_month >0){
echo date($bill_month."-d") . "=> $previous_month<br/>\n";
$paid -= $previous_month;
$previous_month = 0;
$bill_paid_array["$bill_month"][1] = 1;
$bill_paid_array["$bill_month"][0] = $monthly;
}else {
echo date($bill_month."-d") . "=> $monthly<br/>\n";
$date_array[]=$bill_month;
$bill_paid_array[$bill_month] = [$monthly,$is_full_amount];
$paid -= $monthly;
}
if ($paid < $monthly) {
$monthly = $paid;
$is_full_amount = 0;
}
} while ($paid > 0);希望它能按您的意愿工作:)
发布于 2016-11-15 08:05:45
尝尝这个
while (!$var) {
$date = date('2016'.'-'.'07'.'-d');
$time = strtotime($date);
$bill_month = date("Y-m", strtotime( ($x++)." month", $time));
if (in_array($bill_month,$date_array)){
if ($bill_paid_array["$bill_month"][1] == 0){
$found = true;
$previous_month = $monthly -$bill_paid_array["$bill_month"][0];
}
}else
$found = !in_array($bill_month,$date_array) ;
}发布于 2016-09-16 12:31:55
<?php
$paid = 2000;
$monthly = 750;
$date_array = array("2016-07", "2016-09");
$bill_paid_array = array("2016-07" => [750,1], "2016-09" => [600,1]);
$is_full_amount = 1;
$previous_month = 0;
$x=0;
do {
$found = false;
while (!$found) {
$date = date('2016'.'-'.'07'.'-d');
$time = strtotime($date);
$bill_month = date("Y-m", strtotime( ($x++)." month", $time));
if (in_array($bill_month,$date_array)){
if ($bill_paid_array["$bill_month"][1] == 0){
$found = true;
$previous_month = $monthly -$bill_paid_array["$bill_month"][0];
}
}else
$found = !in_array($bill_month,$date_array) ;
}
if ($previous_month >0){
echo date($bill_month."-d") . "=> $previous_month<br/>\n";
$paid -= $previous_month;
$previous_month = 0;
$bill_paid_array["$bill_month"][1] = 1;
$bill_paid_array["$bill_month"][0] = $monthly;
}else {
echo date($bill_month."-d") . "=> $monthly<br/>\n";
$date_array[]=$bill_month;
$bill_paid_array[$bill_month] = [$monthly,$is_full_amount];
$paid -= $monthly;
}
} while ($paid > 0);https://stackoverflow.com/questions/39530515
复制相似问题