两个下拉菜单由3维数组处理以确定价格

时间:2013-02-19 01:22:26

标签: php html

我整个周末一直都在这上面,但似乎无法解决这个问题。

我的HTML包含两个下拉菜单。一个确定特定类型,第二个确定一个组件。

根据每个组件使用的类型,有预定义的成本。

这是我的HTML:

 <td><select name="type">
<option value= "0" selected>None</option>
<option value = "CAR">Car</option>
<option value = "VAN">Van</option>
<option value = "TRK">Truck</option>
</select></td>

<td>Component:</td>
<td><select name="component">
<option value= "0" selected>None</option>
<option value = "TIR">Oil</option>
<option value = "OIL">Tire</option>
<option value = "SPK">Spark Plug</option>
</select></td>

我的php看起来像这样:

$cat = array(
'CAR_TIR' => array('comp' => 'Tires','price' => 100),
'CAR_OIL' => array('comp' => 'Oil', 'price' => 10),
'CAR_SPK' => array('comp' => 'Spark Plug', 'price' => 4),

'VAN_TIR' => array('comp' => 'Tires','price' => 120),
 'VAN_OIL' => array('comp' => 'Oil', 'price' =>12),
      'VAN_SPK' => array('comp' => 'Spark Plug', 'price' =>5),

'TRK_TIR' => array('comp' => 'Tires','price' => 150),
'TRK_OIL' => array('comp' => 'OIL','price' => 15),
'TRK_SPK' => array('comp' => 'Tires','price' => 6),

);
echo $cat[$_POST['type'].'_'.$_POST['component']]['price']; 
?>

我得到的输出看起来像这样: 价格检查? array('comp'=&gt;'Tires','price'=&gt; 100),'CAR_OIL'=&gt; array('comp'=&gt;'Oil','price'=&gt; 10),'CAR_SPK'=&gt; array('comp'=&gt;'Spark Plug','price'=&gt; 4),'VAN_TIR'=&gt; array('comp'=&gt;'Tires','price'=&gt; 120),'VAN_OIL'=&gt; array('comp'=&gt;'Oil','price'=&gt; 12),'VAN_SPK'=&gt; array('comp'=&gt;'Spark Plug','price'=&gt; 5),'TRK_TIR'=&gt; array('comp'=&gt;'Tires','price'=&gt; 150),'TRK_OIL'=&gt; array('comp'=&gt;'OIL','price'=&gt; 15),'TRK_SPK'=&gt; array('comp'=&gt;'Tires','price'=&gt; 6),); echo $ cat [$ POST ['type']。''。$ _ POST ['component']] ['price']; ?&GT;

从字面上看这就是输出。请让我知道我能做些什么。谢谢!

3 个答案:

答案 0 :(得分:0)

是否需要三维数组?对我来说,这似乎是一种非常混乱且难以阅读的处理方式。如果可能的话,我会想到三个阵列会更容易阅读吗?

写三个单独的数组以显示下拉列表(尝试foreach而不是for循环),然后使用每个数组的值来计算提交后的价格。

如果这不是您想要的,那么您必须更好地澄清您的问题。 :)

答案 1 :(得分:0)

您应该使用嵌套的关联数组而不是数字。关联数组是一个字符串而不是数字引用它的元素。这应该更容易引用每个元素。

对于您的情况,您应该使用类似的内容:

$categories = array( 
    'car' => array( 'oil' => 10, 'spark' => 10 ),
    'van' => array( 'oil' => 12, 'spark' => 12 ),
    'truck' => array( 'oil'=> 15, 'spark' => 15 )
);

要从表单中获取所选项目,您可以这样做:

$type = $_POST['type'];
$component = $_POST['component'];
// Error check $type and $component
$selected = $categories[$type][$component];

不要忘记将html option值从整数更改为与数组键匹配的字符串。您还需要将for循环更改为foreach loops.

答案 2 :(得分:0)

为什么不通过两个维度和一个关联数组,我觉得更容易阅读:

<td>Car type:</td>
<td><select name="type">
    <option value= "0" selected>None</option>
    <option value = "CAR">Car</option>
    <option value = "VAN">Van</option>
    <option value = "TRK">Truck</option>
</select></td>

<td>Component:</td>
<td><select name="component">
    <option value= "0" selected>None</option>
    <option value = "TIR">Oil</option>
    <option value = "OIL">Tire</option>
    <option value = "SPK">Spark Plug</option>
</select></td>

$cat = array(
    'CAR_TIR' => array('comp' => 'Tires','price' => 100),
    'CAR_OIL' => array('comp' => 'Oil', 'price' => 10),
    'CAR_SPK' => array('comp' => 'Spark Plug', 'price' => 4),
    'VAN_TIR' => array('comp' => 'Tires','price' => 200),
    'TRK_TIR' => array('comp' => 'Tires','price' => 300)
    ); // fill in the missing values for VAN and TRK

引用:

echo $cat['CAR_TIR']['comp']; // output: Tires
echo $cat['CAR_TIR']['price']; // output: 100
echo $cat['TRK_TIR']['price']; // output: 300

使用表单中的输入进行引用(假设已设置typecomponent):

echo $cat[$_POST['type'].'_'.$_POST['component']]['price']; 
// type='CAR', component='OIL', Output: 10

循环:

foreach ($cat as $key => $value) {
    echo 'Code: '.$key.', component: '.$value['comp'].', price:'.$value['price'];
}