PHP数组:具有多个数组的数学运算
我这里有一个逻辑问题,我应该如何在PHP中执行它,非常感谢您的支持 我有两个阵列:PHP数组:具有多个数组的数学运算,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我这里有一个逻辑问题,我应该如何在PHP中执行它,非常感谢您的支持 我有两个阵列: 发票 付款 数组看起来像这样 $invoice = array ( array("id"=>1,"amt"=>2000.00), array("id"=>2,"amt"=>3000.00), array("id"=>3,"amt"=>4000.00) ); $payments = array ( array("id"=>11111,"a
$invoice = array
(
array("id"=>1,"amt"=>2000.00),
array("id"=>2,"amt"=>3000.00),
array("id"=>3,"amt"=>4000.00)
);
$payments = array
(
array("id"=>11111,"amt"=>500.00),
array("id"=>22222,"amt"=>3000.00),
array("id"=>33333,"amt"=>4500.00),
array("id"=>44444,"amt"=>1500.00)
);
更新
这是我写的代码
// count how many elements available
$sc = count($iSetl);
$ic = count($payments);
/*
Three types of flags
$flag = 0 // first execution
$flag = 1 // settlement amount is higher than the payment amount
$flag = 2 // payment amount is higher than the settlement amount
*/
// available balances after transaction
$setBal = 0; // settlement balance
$paymBal = 0; // payment balance
$flag = 0;
// our priority is to disburse all payments
// therefore our initial loop would be payments
foreach($payments as $p){
// round 2:
// settlement value is higher there for we are approaching to the next invoice
if($flag == 1){
if($setBal > 0){
if($setData <= $p["amt"]){
$setData = $p["amt"] - $setData;
//echo($setData)."<br />";
$output = "invoice number #".$s["id"]." | invoice value ".$s["amt"]." Payment Number " . $p["id"] . " - Payment Amount ". $p["amt"]."<br />";
$output .= "after settlement the invoice value is ". $setData;
echo($output);
echo "<br />the payment value is more than the invoice settlement <br /><br />";
$setBal = $setData;
$flag = 2;
}
}
}
// start looping each settlements
foreach($iSetl as $s){
// check if this is the initial transaction
if($flag == 0 ){
// if the settlement balance is equal to 0 (or less)
// or settlement is complete
if($setBal <= 0) {
// this case: Settlement amount is more than the payment amount therefore
// deduct the settlement from payment
$setData = $p["amt"];
$setData = $s["amt"] - $setData;
$output = "invoice number #".$s["id"]." | invoice value ".$s["amt"]." Payment Number " . $p["id"] . " - Payment Amount ". $p["amt"]."<br />";
$output .= "after settlement the invoice value is ". $setData;
echo($output);
//echo($setData)."<br />";
echo "<br />the invoice settlement value is more than the payment value<br /><br />";
// assign the balance amount to be settled
$setBal = $setData;
// set the flag as 1 since the settlement value is higher than payment value
$flag = 1;
}
}
if($flag == 2 ){
// if the settlement balance is equal to 0 (or less)
// or settlement is complete
if($setBal > 0) {
echo("stage3 <br />");
// this case: Settlement amount is more than the payment amount therefore
// deduct the settlement from payment
$setData = $s["amt"] - $setData;
//echo($setData)."<br />";
$output = "invoice number #".$s["id"]." | invoice value ".$s["amt"]." Payment Number " . $p["id"] . " - Payment Amount ". $p["amt"]."<br />";
$output .= "after settlement the invoice value is ". $setData;
echo($output);
echo "<br />the invoice settlement value is more than the payment value<br /><br />";
// assign the balance amount to be settled
$setBal = $setData;
// set the flag as 1 since the settlement value is higher than payment value
$flag = 1;
}
}
}
}
//计算有多少元素可用
$sc=计数($iSetl);
$ic=计数($payments);
/*
三种旗帜
$flag=0//第一次执行
$flag=1//结算金额高于支付金额
$flag=2//付款金额高于结算金额
*/
//交易后可用余额
$setBal=0;//结算余额
$paymBal=0;//付款余额
$flag=0;
//我们的首要任务是支付所有款项
//因此,我们的初始循环是支付
foreach(按$p付款){
//第二轮:
//那里的结算价值更高,因为我们正在接近下一张发票
如果($flag==1){
如果($setBal>0){
如果($setData 0){
回声(“阶段3
”);
//这种情况:因此结算金额大于付款金额
//从付款中扣除结算
$setData=$s[“金额”]-$setData;
//echo($setData)。“
”;
$output=“发票编号”#“$s[“id”]。”发票价值“$s[“amt”]。”付款编号“$p[“id”]。”-付款金额“$p[“amt”]。”
”;
$output.=“结算后发票值为”$setData;
回波(输出);
echo“
发票结算值大于付款值
”;
//分配要结算的余额
$setBal=$setData;
//由于结算值高于付款值,因此将标志设置为1
$flag=1;
}
}
}
}
当发票“金额”高于付款“金额”金额时,我想用付款“金额”结算发票“金额”,而在其他情况下,付款高于发票金额
结果应该显示为
非常困惑如何处理此问题,请提供帮助。如果需要对其进行排序,可以使用数组合并创建一个数组,并对该数组进行排序 这是php排序方法:
http://php.net/manual/en/function.usort.php
或
您需要在回调函数中添加列以进行比较
但是,如果这些数据来自数据库,请尝试从子查询并按列排序
等等。。。按“ASC”排序您能解释一下创建表时应用的逻辑吗?因为我无法理解逻辑。那么只有任何一个人能够回答我更新了我写的脚本。请告知,我打算做的是,根据相应阵列中的可用付款结算所有发票。有时发票无法完全结算(付款),在这种情况下,我需要从付款中找到下一个可用的数组元素。当已结算的付款在我希望结算下一个发票数组元素的位置剩余时,也会发生同样的情况。我显示的表是我期望从上面提到的两个数组得到的结果。希望这是清楚的。我的问题不是排序,我需要根据付款数组中的付款与发票结算发票。
http://php.net/manual/en/function.array-multisort.php