将嵌套的 PHP if 语句转换为单个 if 语句

Turning a nested PHP if statement into a single if statement

我正在尝试弄清楚如何将这个嵌套的 if 语句转换为单个 if 语句,但无法将其转换为 运行。

这是原始的嵌套 if 语句:

if (isset($_REQUEST['gender'])) 
    {
        $gender = $_REQUEST['gender'];

        if ($gender == 'M') 
        {
            echo '<p><b>Good day, Sir!</b></p>';
        } 
        elseif ($gender == 'F') 
        {
            echo '<p><b>Good day, Madam!</b></p>';
        } 
        else 
        { // Unacceptable value.
            $gender = NULL;
            echo '<p class="error">Gender should be either "M" or "F"!</p>';
        }
    } 
    else 
    { // $_REQUEST['gender'] is not set.
        $gender = NULL;
        echo '<p class="error">You forgot to select your gender!</p>';
    }

这是我的尝试:

        if (isset($_REQUEST['gender']) && $gender == 'M') 
    {
        $gender = $_REQUEST['gender'];
        echo '<p><b>Good day, Sir!</b></p>';
    } 
    elseif (isset($_REQUEST['gender']) && $gender == 'F') 
    {
        $gender = $_REQUEST['gender'];
        echo '<p><b>Good day, Madam!</b></p>';
    } 
    elseif (isset($_REQUEST['gender']) && $gender != 'M' || (isset($_REQUEST['gender']) && $gender != 'F') 
    { // Unacceptable value.
        $gender = $_REQUEST['gender'];
        $gender = NULL;
        echo '<p class="error">Gender should be either "M" or "F"!</p>';
    }
    else
    { // $_REQUEST['gender'] is not set.
        $gender = NULL;
        echo '<p class="error">You forgot to select your gender!</p>';
    }

我不确定是不是因为 $gender = $_REQUEST['gender']; 没有执行,但我们将不胜感激。

您正在检查变量 $gender,然后再为其赋值。以下内容会有所帮助,

$gender = isset($_REQUEST['gender']) ? $_REQUEST['gender'] : "";
if ($gender == 'M') 
{
    echo '<p><b>Good day, Sir!</b></p>';
} 
else if($gender == 'F') 
{
    echo '<p><b>Good day, Madam!</b></p>';
} 
else if (!empty($gender) && ($gender != 'M' || $gender != 'F'))
{   // Unacceptable value.
    echo '<p class="error">Gender should be either "M" or "F"!</p>';
}
else
{ 
   echo '<p class="error">You forgot to select your gender!</p>';
}

这里的 switch 语句可能更简洁。

switch ($_REQUEST['gender']) {
    case null:
        echo '<p class="error">You forgot to select your gender!</p>';
        break;
    case 'M':
        echo '<p><b>Good day, Sir!</b></p>';
        break;
    case 'F':
        echo '<p><b>Good day, Madam!</b></p>';
        break;
    default:
        echo '<p class="error">Gender should be either "M" or "F"!</p>';
}

这是我执行此操作的未经测试的方法。我也会先进行客户端 (javascript) 检查。我还假设你的性别字段是文本,如果是 select 你可以去掉 strtolower 和 trim.

<?php
if (empty($_REQUEST['gender']) || (strtolower(trim($_REQUEST['gender'])) != 'm' && strtolower(trim($_REQUEST['gender'])) != 'f')) {
    //this should probably be checked client side for better usability, but better to check server side that we trust the data
    echo '<p class="error">Please enter a valid Gender</p>';
} else {
    $gender = strtolower(trim($_REQUEST['gender']));
    echo '<p><b>Good day, ';
    if ($gender == 'm') {
        echo 'Sir!</b></p>';
    }  else {
        echo 'Madam!</b></p>';
    }
}