我认为你可以使用条件树,而不是循环
这是一个有趣的问题,从我的理解来看,每当进行新的出价时,该函数将被触发。你所想要做的应该是:
- 存储用户试图插入的出价。
- 获取当前竞标者的最高出价(此时不应存在比这个更高的出价,因为它们将已经被该函数之前的迭代解决)。
接下来:
/**
* $currentBidder = The current high bidder
* $highBid = The current high bidder's high bid
* $thisBidder = Bidder placing the new bid
* $thisBid = The bid that triggered the function
* $increment = The minimum bid increment
*/
function placeBid($currentBidder,$highBid,$thisBidder,$thisBid,$increment) {
if($thisBid > $highBid) {
// Insert $highBid as current bid, for $currentBidder
if($thisBid > $highBid + $increment) {
// Insert $thisBid into highbids table
// Insert $highBid + $increment as current bid, for $thisBidder
} else {
// Insert $thisBid as current bid, for $thisBidder
}
} else {
// Insert $thisBid as current bid for $thisBidder
if($highBid > $thisBid + $increment) {
// Insert $thisBid + $increment as current bid, for $currentBidder
} else {
// Insert $thisBid as current bid, for $currentBidder
}
}
}
注:
- 如果新出价等于最高出价,我会代表当前出价者选择前者。
- 在所有情况下,我都会选择最高出价,即使它不比当前最高出价+增量更高。
显然,你需要检查是否是第一个出价,如果是,将出价设置为最低要求值。你需要检查出价是否有效(大于当前出价+增量),但我没有包含该代码。
据我所见,如果每次进行竞标时触发函数,你将根本不需要循环,只需要一个条件树。
场景:
Item Current Bids: A, 4000
Item Current Max: A, 4000
--> C bids 7500
Item Current Bids: A, 4000; C, 5000
Item Current Max: C, 7500
--> B bids 7500
Item Current Bids: A, 4000; C, 5000; B, 7500; C, 7500
Item Current Max: C, 7500
--> A bids 9000
Item Current Bids: A, 4000; C, 5000; B, 7000; C, 7500; A, 8500
Item Current Max: A, 9000