在 php 7.4 及以上,用 array_map() 配合 fn 可给数组里的每个价格应用同一条打折规则。示例用整数分存价格,乘以 8 再除以 10,舍去不足一分的部分。
用 array_map 批量计算八折价
将示例保存为 discount.php。折扣分子由外部变量提供,箭头函数在定义时按值捕获它。
<?php $prices = [100, 250, 399]; $factor = 8; $discount = fn (int $cents): int => intdiv($cents * $factor, 10); echo json_encode(array_map($discount, $prices)), PHP_EOL;

执行 php discount.php,预期输出 [80,200,319]。这里的输入和输出单位都是分。
修改折扣变量后,已有函数会变化吗
在脚本末尾修改折扣分子,再比较原函数和新建函数。
立即学习“PHP免费学习笔记(深入)”;
$factor = 9; echo $discount(250), PHP_EOL; $updated = fn (int $cents): int => intdiv($cents * $factor, 10); echo $updated(250), PHP_EOL;

依次输出 200 和 225。原函数仍使用定义时捕获的 8。
需要多个判断时改用普通闭包
如果促销规则要求满 200 分才打折,并且需要先检查价格,就用可写多条语句的普通闭包。
$eligibleDiscount = function (int $cents): int {
if ($cents < 0) {
throw new InvalidArgumentException('Price cannot be negative');
}
return $cents >= 200 ? intdiv($cents * 8, 10) : $cents;
};
echo json_encode(array_map($eligibleDiscount, $prices)), PHP_EOL;预期输出 [100,200,319]。实际支付系统应以业务规定的舍入方式为准。



















