我正在尝试从表单中获取POSTED数字的反转。
<select name="inverse_num">
<option value="2">2 </option>
<option value="1">1 </option>
<option value="1/2">1/2 </option>
<option value="1/3">1/3 </option>
</select>
在获取值的php文件中,说“1/2”,
$my_inverse=1/($_POST[inverse_num]); // returns 1 , but..
$my_inverse=1/(1/2); // returns 2, which is required.
为什么会发生这种情况..从逻辑上来说,我发布了相同的价值。请建议。
答案 0 :(得分:3)
您可以采取以下措施:
function simple_fractions ($value) {
if (is_numeric($value)) {
return $value;
}
preg_match('/^(\d+)\/(\d+)$/', $value, $matches);
if ($matches[1] && $matches[2]) {
return $matches[0] / $matches[1];
}
if ($matches[1] == 0) {
return 0;
}
return false;
}
答案 1 :(得分:2)
你的两个表达方式:
$my_inverse=1/($_POST[inverse_num]); // array keys shall be quoted
$my_inverse=1/(1/2);
实际上是:
$my_inverse=1/"1/2";
$my_inverse=1/(1/2);
这解释了结果。
如果您要发送字符串0.5
,那么PHP将按预期处理它,顺便说一句。
答案 2 :(得分:1)
Quentin有一个可能的解决方案。
然而,在我看来,另一个更好:
<select name="inverse_num">
<option value="a">2 </option>
<option value="b">1 </option>
<option value="c">1/2 </option>
<option value="d">1/3 </option>
</select>
然后在你的提交脚本中:
if($_POST['inverse_num'] == 'a'){
$value = 2;
}elseif($_POST['inverse_num'] == 'b'){
$value = 1;
}elseif($_POST['inverse_num'] == 'c'){
$value = 1/2;
}elseif($_POST['inverse_num'] == 'd'){
$value = 1/3;
}
等...
这种方法没什么复杂的。
答案 3 :(得分:0)
如何发布小数而不是分数? 例如0.5