Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 不同的价格取决于一周中的哪一天_Php - Fatal编程技术网

Php 不同的价格取决于一周中的哪一天

Php 不同的价格取决于一周中的哪一天,php,Php,我正在学习PHP,我想根据一周中的哪一天为我的产品显示不同的价格。例如,周一的价格应该是50%的折扣,周三的价格应该是10%以上,以此类推。 我曾考虑使用带有switch语句的函数,但我无法使其工作。希望有人能给我一些建议 function day_of_week($day) { $day = "Monday"; switch ($day) { case "Monday": $key['price'] / 2;

我正在学习PHP,我想根据一周中的哪一天为我的产品显示不同的价格。例如,周一的价格应该是50%的折扣,周三的价格应该是10%以上,以此类推。 我曾考虑使用带有switch语句的函数,但我无法使其工作。希望有人能给我一些建议

    function day_of_week($day) {
    $day = "Monday";

    switch ($day) {
        case "Monday":
            $key['price'] / 2;
            break;
        case "Wednesday":
            $key['price'] * 1.1;
            break;
        case "Friday":
            if($key['price'] >= 200) {
                $key['price'] - 20;
            }   
    }

}
Today's price:
<?php echo day_of_week($day); ?>
每周的功能日($day){
$day=“星期一”;
交换机(天){
案件“星期一”:
$key['price']/2;
打破
案件“星期三”:
$key['price']*1.1;
打破
案件“星期五”:
如果($key['price']>=200){
$key['price']-20;
}   
}
}
今日价格:

如评论中所述,存在许多问题,如$day重新初始化和$key不在功能范围内以及不返回任何内容等

以下是工作代码:


另一种可能的方式

您可以创建一个作为控制器来执行此操作。它需要创建并使用来执行闭包

$priceChart = (object)
[
    'monday' => function($price) {
        return (int) $price / 2;
    },
    'wednesday' => function($price) {
        return (int) $price * 1.1;
    },
    'friday' => function($price) {
        return (int) $price > 200 ? (int) $price - 20 : (int) $price;
    }
];

$price = 20.00; // Can be of type string
$currentDay = 'WednEsdAy'; // Capitals do not matter or use date('l');
$newPrice = isset($priceChart->{strtolower($currentDay)}) ? call_user_func_array($priceChart->{strtolower($currentDay)}, [$price]) : $price;

您可以在3v4l结束。

不要在函数中为$day赋值。它将覆盖您传递给函数参数的任何内容。@LeanderIversen Hi!我把它放在函数之外,但没有任何变化。我应该把它放在哪里?很多问题。您正在覆盖
$day
,因此它将始终是“星期一”。
$key
从哪里来?您对
$key['price']
执行的任何计算的结果都不会产生任何影响。您没有从函数返回结果。函数外部可以。您还需要一个return语句,例如return$key['price']/2。它正在工作!非常感谢!你能解释一下$key['price']=2000是如何工作的吗?我真的不明白。
break对于“星期三”并不是很必要,因为它前面有一个返回:-)我假设它存储在一个数组中,现在数组是在函数外部定义的,比如说全局,所以要访问该变量,需要通过函数传递它或调用全局$whatevervariableyounedineffunction;在函数的开头。只需注意一下
$price
-变量。应该将其传递给函数(如此答案所示)。使用
global
是一种反模式,应尽可能避免(如果您使用最佳实践编写代码,则或多或少应避免使用这种情况)。@MagnusEriksson
global
常量可以,而使用
global
非常量变量则应避免使用。:-)