php - 如何在php中优化64 if else if语句
问题描述
我可以将代码优化为小代码吗,因为我有 2 个选择和 8 个选项
这是php代码:
if (isset($_POST['groupM']) && isset($_POST['groupF'])) {
$groupM = $_POST['groupM'];
$groupF = $_POST['groupF'];
if ($groupM == 1 && $groupF == 1) {
echo "It's a girl";
}elseif($groupM == 1 && $groupF == 2){
echo "Baby's gender can not be predicted — Rh factor and blood type produce different results.";
}elseif($groupM == 1 && $groupF == 3){
echo "Baby's gender can not be predicted — Rh factor and blood type produce different results.";
}elseif($groupM == 1 && $groupF == 4){
echo "It's a boy";
}elseif($groupM == 1 && $groupF == 5){
echo "It's a girl";
}elseif($groupM == 1 && $groupF == 6){
echo "Baby's gender can not be predicted — Rh factor and blood type produce different results.";
}elseif($groupM == 1 && $groupF == 7){
echo "Baby's gender can not be predicted — Rh factor and blood type produce different results.";
}elseif($groupM == 1 && $groupF == 7){
echo "It's a boy";
}
// ... and so on. 64 result have
}
此代码通过选择父亲血型和母亲血型的血型(男孩或女孩)计算婴儿的性别预测并显示结果
这是html代码:
<form id="get_my_baby_gender" method="POST">
<label for="groupM">Father's blood group:</label>
<select class="input_box" id="groupM" name="groupM" size="1">
<option value="1">O(I) Rh−</option>
<option value="2">O(I) Rh+</option>
<option value="3">A(II) Rh−</option>
<option value="4">A(II) Rh+</option>
<option value="5">B(III) Rh−</option>
<option value="6">B(III) Rh+</option>
<option value="7">AB(IV) Rh−</option>
<option value="8">AB(IV) Rh+</option>
</select>
<label for="groupF">Mother's blood group:</label>
<select class="input_box" id="groupF" name="groupF" size="1">
<option value="1">O(I) Rh−</option>
<option value="2">O(I) Rh+</option>
<option value="3">A(II) Rh−</option>
<option value="4">A(II) Rh+</option>
<option value="5">B(III) Rh−</option>
<option value="6">B(III) Rh+</option>
<option value="7">AB(IV) Rh−</option>
<option value="8">AB(IV) Rh+</option>
</select>
<input name="method" type="hidden" value="blood_group">
<input id="get_gender_results" type="submit" value="What's my baby's gender?">
</form>
解决方案
您可以设置一个二维数组,$groupM
并将$groupF
它们的值用作其中的索引。-1
在这种情况下,我分配了0
和的值1
来表示 3 种可能的结果(女孩、未知和男孩):
$gender = array(1 => array(1 => 1, 0, 0, -1, 1, 0, 0, -1),
2 => array(1 => 0, 1, 1, 0, 0, -1, -1, 0),
...
8 => array(1 => 0, -1, 1, 0, 0, 1, -1, 0)
);
if (isset($_POST['groupM']) && isset($_POST['groupF'])) {
$groupM = $_POST['groupM'];
$groupF = $_POST['groupF'];
$result = $gender[$groupM][$groupF];
switch ($result) {
case 1:
echo "It's a girl!";
break;
case 0:
echo "Baby's gender can not be predicted — Rh factor and blood type produce different results.";
break;
case -1:
echo "It's a boy";
break;
}
}
推荐阅读
- caching - 远程模式下对 JBoss 数据网格的 JTA 事务支持
- css - 使用 CSS Grid 的父 div 的跨度宽度
- r - 贝叶斯元分析 t 检验 - 混合一样本和二样本 (BayesFactor)
- javascript - 使用jquery表单和laravel的文件进度条
- sql - 如何在 Redshift 中存储一组字符串?
- c++ - 如何检测 unordered_map 向量中的重复项?
- css - 在 wordpress 中更改顶部菜单颜色
- regex - 如何从顶点中的字符串中删除单行和多行注释
- php - Laravel - 如何为同一个 api 资源制作不同的表单
- javascript - 使用 vanilla Javascript 显示图像替代文本