谁欠了什么PHP脚本

时间:2013-05-10 09:48:06

标签: php arrays multidimensional-array

我试图让一个谁欠PHP中的脚本,但是输入代码比我想象的要难得多。

我举了一个下面5个人的例子:

Person  Paid    Owes/Receivables
A       480     -26
B       600     94
C       1200    694
D       250     -256
E       0       -506
TOTAL   2530    
Average owe per person = 506    

我想要实现的是一个脚本,打印出每个人欠多少钱以及给谁。我的第一种方法是将欠钱的人分成array,将需要在另一个array获得报酬的人分开。我仍然对这种方法感到困惑,所以我无法解释我之后会做些什么。

这是我的剧本规则:

  • 排列arrays的值最高的第一个。
  • 从欠款数组中减去最高的应收款。
  • 如果应收款项值仍为正值,请转到owes数组中的下一个值。
  • 如果现在应收款项值为负,请执行以下操作:取负值并从原始欠款中减去该值,然后从可接收数组上的值中减去该值(则该值将为0)。转到可接收数组的下一个。

不确定这是否有意义。我只是希望有人能澄清一下。

我已经制作了2个数组,我想可能是一段时间或者带有值的foreach循环,如果句子可以做到,但我现在很困惑。

2 个答案:

答案 0 :(得分:1)

您拥有每个人支付的平均价值,您拥有每个人的应收账款和欠款值,现在您需要找到一种方法在拥有应收价值的人之间平均分配欠款。

使用“公平”算法和您的示例,可以按如下方式计算人员C的人员值:

$valueOwedByE * $valueReceivableByC / $totalReceivableValue

这为您提供了具有应收款值的人员中欠款值的加权分配。使用此算法,您的所有应收款值应同时达到0,而应收账款价值较高的人将获得更大的债务。

当然你可以使用不同的算法。在尝试实现它之前确定要使用的算法,尝试建立它的数学模型,然后实现它变得微不足道。

答案 1 :(得分:0)

使用关系数据库,SQLite可能是你想要做的事情的理想选择。如果没有,您可以使用关联数组模拟关系数据库。

这样你可以有两个表:

PERSONS
id INT
name VARCHAR(50)

DEBTS
debtor_id INT
creditor_id INT
value DECIMAL(8,2)

您可以在id表格的PERSONS上设置主键约束,然后使用debtor_idcreditor_id的合并作为DEBTS中的主键。 debtor_idcreditor_id将是引用PERSONS表的外键。

这样,如果John欠Jack $ 50.00,你就有这些记录:

PERSONS
id        name
1         John
2         Jack

DEBTS
debtor_id  creditor_id value
1          2           50.00