首页 > 解决方案 > 如何在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−&lt;/option>
                    <option value="2">O(I) Rh+</option>
                    <option value="3">A(II) Rh−&lt;/option>
                    <option value="4">A(II) Rh+</option>
                    <option value="5">B(III) Rh−&lt;/option>
                    <option value="6">B(III) Rh+</option>
                    <option value="7">AB(IV) Rh−&lt;/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−&lt;/option>
                <option value="2">O(I) Rh+</option>
                <option value="3">A(II) Rh−&lt;/option>
                <option value="4">A(II) Rh+</option>
                <option value="5">B(III) Rh−&lt;/option>
                <option value="6">B(III) Rh+</option>
                <option value="7">AB(IV) Rh−&lt;/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>

标签: php

解决方案


您可以设置一个二维数组,$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;
    }
}

推荐阅读