在变量数组中传递变量来计算字段PHP

时间:2014-08-19 05:07:22

标签: php arrays wordpress function switch-statement

好吧,我可能会让自己有点过于复杂,但我真的想弄明白这一点,而且我仍然坚持如何让它发挥作用。这是一个wordpress网站

所以我想要完成的过程就是:

  1. 确定客户端级别以确定客户端将具有哪个价格点。 选项:高,低,中等

  2. 根据客户级别,选择要在我的计算中使用的相应产品乘数 选项:p_high,p_medium或P_low

  3. 运行一个公式,根据所选的乘数类型计算最终价格。

  4. 如果客户级别不高,价格将显示当前/现在的价格点,因此必须使用p_high和p_low值。

  5. 我尝试创建一个函数,将一个数组设置为在foreach循环中运行,以计算price1和price2。但是,虽然我还没有测试过,但我很确定这不会达到我所追求的目标。

    我假设我可以增加变量名来创建price1和price 2变量,但我不完全确定最好的方法,或者它是否是正确的解决方案。如果有人能帮助我,那就太好了。

    注意:switch语句确实包含与先前定义的关联数组一起出现的变量。一旦我弄清楚如何正确传递变量,存在的echo语句将被该函数替换。

    function get_client_lvl ()
    {$user_id = get_current_user_id();
    
    If ($user_id == 0)
      {return "high";}
    Else
      {get_user_meta($user_id, wpcf-client-lvl, true); }
    }
    
    $client_lvl=get_client_lvl();
    
    function display_right_price($client_lvl, $multiplier)
    {If ($client_lvl == "high")
      {echo "\${$price1}";}
    
    else {
    echo "WAS:\${$price1}<br/>";
    echo "Now: \${$price2}";
    }}
    
    $p_high= 2; //get_post_meta($post_id,$key
    $p_med= 1.5;
    $p_low =1.1;
    $cogs= 10;
    $img_count =3;
    $img_cost= 10;
    $area= 40;
    $m_type=  'Area';
    
    
    if ($client_lvl == 'med')
    {$prices=array($p_high, $p_med);}
    
    elseif ($client_lvl == 'low')
    {$prices=array($p_high, $p_low);}
    else
    {$prices=array($p_high);}
    
        Foreach($prices as $multiplier)
        {
    switch ($m_type) {
    
         case 'Area':
             $price= $multiplier * $area;
                echo "The {$lvl} price is \${$price}<br/>";/>";  //This will be replaced with display_right_price() function once the price variables are established
             break;
    
         case 'Image':
    
             $price= $multiplier * $img_count *$cogs;
             echo "The {$lvl} price is \${$price}<br/>";/>";  //This will be replaced with display_right_price() function once the price variables are established
             break;
    
         case 'Commission':
    
             $price= $multiplier + $cogs;
             echo "The {$lvl} price is \${$price}<br/>";/>";  //This will be replaced with display_right_price() function once the price variables are established
             break;
    
         case 'Flat':
    
             $price= $multiplier;
             echo "The {$lvl} price is \${$price}<br/>"; />";  //This will be replaced with display_right_price() function once the price variables are established
             break;
    
         case 'Commission+Image':
    
             $price= $multiplier + ($img_cost*$img_count);
             echo "The {$lvl} price is \${$price}<br/>";/>";  //This will be replaced with display_right_price() function once the price variables are established
             break;
    
         case 'Price':
    
             $price= $multiplier * $cogs;
             echo "The {$lvl} price is \${$price}<br/>";/>";  //This will be replaced with display_right_price() function once the price variables are established
             break;
    }}
    

    编辑:我想出来了(现在只需要弄清楚如何从两种不同的帖子类型中动态提取变量:

    function get_client_lvl ()
    {$user_id = get_current_user_id();
    If ($user_id == 0)
    {return 'high';}
    Else
    {get_user_meta($user_id, wpcf-client-lvl, true); }
    }
    
    //$client_lvl=get_client_lvl();
    
    
    $postid = get_the_ID();
    $client_lvl='high';
    
    
    
    
    
    function display_right_price($client_lvl)
    {
    $p_high= 3.2; //get_post_meta($post_id,$key)
    $p_med= 1.3;
    $p_low =1.1;
    $cogs= 11.53;
    $img_count =3;
    $img_cost= 10;
    $area= 40;
    $m_type= 'Price';
    $price=array();
    
    if ($client_lvl == 'med')
    {$prices=array('high'=>$p_high,'med'=> $p_med);}
    
    elseif ($client_lvl == 'low')
    {$prices=array('high'=>$p_high,'low'=> $p_low);}
    else
    {$prices=array('high'=>$p_high);}
    
        Foreach($prices as $multiplier)
        {
    switch ($m_type) {
    
         case 'Area':
             $total[]= $multiplier * $area;
                           break;
    
         case 'Image':
    
             $total[]= $multiplier * $img_count *$cogs;
    
             break;
    
         case 'Commission':
    
             $total[]= $multiplier + $cogs;
    
             break;
    
         case 'Flat':
    
             $total[]= $multiplier;
    
             break;
    
         case 'Commission+Image':
    
             $total[]= $multiplier + ($img_cost*$img_count);
    
             break;
    
         case 'Price':
    
             $total[]= $multiplier * $cogs;
    
             break;
    }}
    $p1=number_format($total[0],2,'.',',');
    If ($client_lvl == "high")
    {
    
    echo "\${$p1}";
    }
    else {
    $p2=number_format($total[1],2,'.',',');
    echo "WAS: \${$p1}<br/>";
    echo "NOW: \${$p2}";
    }}
    
    display_right_price($client_lvl);
    

1 个答案:

答案 0 :(得分:0)

我认为你需要研究的是variable scope。使用“global”允许在函数外部设置的变量在其中可见。例如:

function display_right_price($client_lvl, $multiplier) {

    // allow variables $p_high, $p_med, $p_low to be visible inside the function
    global $p_high, $p_med, $p_low;

    // ...

}

但是,为了简化,您可以将$ client_lvl和产品ID传递给display_right_price()函数,然后执行所有计算并从函数内部打印价格?