根据字符串数据分配变量

时间:2009-11-23 19:13:03

标签: php variables string

我有一个效率低下的表单,显然每个SELECT元素发送一种类型的数据。为简单起见,这是一个例子。

表单从2个SELECT元素发布数据,但实际上需要包含3个数据。对于用户,SELECT do 包含3个数据;一个SELECT表示数量,另一个SELECT表示项目名称和使用OPTION标签之间的文本的价格。

因此,表单只发送$ quantity和$ itemname

在处理过程中,我正在尝试构建一堆IF或SWITCH以提供缺失的价格。因为与$ itemname相关联的字符串是唯一的,我正在尝试制作一个提供价格的“密钥”。我的逻辑是,如果$ itemname包含“One Inch Nut”,我可以找到$ price的价格:

if ($itemname = "Once Inch Nut;") { $price = .25; }

如果$ itemname是别的,我会在交换机中添加另一个IF或IF else或CASE。

事实上,我正在这样做,但当我从SELECT中选择另一个OPTION时,$ price甚至$ item名称被定义为我的“IFs”堆栈中的最后一个“IF”

所以,如果我选择了20项SELECT分组中的第3项,当我需要使用变量(添加,回显,无论如何)时,我最终会得到“IF”的结尾栈“

显然,我对IE ELSEIF ELSE的逻辑和理解存在缺陷。

关于如何从变量的字符串数据中创建“Key”的想法?

谢谢, 罗布

请参阅下文,了解我认为的工作原理的简略示例:

假设表单为$ itemname发布了“cat”,为$ qty发布了“3”

<? 
$itemname =  $_POST['specificitem'] ;
$qty =  $_POST['quantity'] ;

if ($itemname = "cat;") { $price = 2.25; }
if ($itemname = "dog;") { $price = 1.25; }
if ($itemname = "hamster;") { $price = 3.25; }
if ($itemname = "parakeet;") { $price = 7.25; }
if ($itemname = "werewolf;") { $price = 122.25; }

echo $itemname; 
echo "$"$price;

?>

应该收益:cat $ 2.25 ????

2 个答案:

答案 0 :(得分:2)

您需要==来测试:

if ($itemname == "cat;") { $price = 2.25; }

但是,通常会看到switch用于此类情况:

$itemname =  $_POST['specificitem'] ;
$qty =  $_POST['quantity'] ;

switch($itemname)
{
  case "cat;":
    $price = 2.25;
    break;
  case "dog;":
    $price = 1.25;
    break;
  case "hamster;":
    $price = 3.25;
    break;
  case "parakeet;":
    $price = 7.25;
    break;
  case "werewolf;":
    $price = 122.25;
    break;
}

echo $itemname;
echo "$"$price;

答案 1 :(得分:1)

我建议您使用“table”approch代码。创建一个表示按项目名称定价的数组。并获得单线价格如下:

<? 
$itemname =  $_POST['specificitem'] ;
$qty =  $_POST['quantity'] ;

## creating a price "table"
$item_prices = array(
    'cat;' => 2.25,
    'dog;' => 1.25,
    ## adding more is easy here
);
if (array_key_exists($itemname, $item_prices)) {
    ## get price in single line
    $price = $item_prices[$itemname];
}
else {
    ## set some default price if item is unknown
}

echo $itemname; 
echo "$",$price;

?>

稍后,如果需要,您可以使用$item_pricesselect代码生成选项。