我整个周末一直都在这上面,但似乎无法解决这个问题。
我的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;
从字面上看这就是输出。请让我知道我能做些什么。谢谢!
答案 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
使用表单中的输入进行引用(假设已设置type
和component
):
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'];
}