【问题标题】:else if is not working in my php code , what should i do?否则,如果在我的 php 代码中不起作用,我该怎么办?
【发布时间】:2019-12-10 11:38:08
【问题描述】:

大家好,我有一个从另一个页面接收值的代码,我想检查该值是否等于数组中的一个值,然后给我该值,所以这是我的代码:

**<?php
   session_start();
ob_start();
 //where we get data from the form
if (isset($_POST["btn"])){
    $name=$_POST["name"];
$number=$_POST["number"];
$date=$_POST["fd"].'/'. $_POST["sd"].'/' .$_POST["td"];
    echo $name;
    echo"</br>";
    echo $number;
    echo"</br>";
    echo $date;

    }
$ar=sscanf($date,"%d/%d/%d");

$month1=$ar[1]; // for example the value is 5

从这里我有数组

$month=array(
    "juan"  =>"1",
    "feb"   =>"2",
    "march" =>"3",
    "april" =>"4",
    "may"   =>"5",
    "jun"   =>"6",
    "july"  =>"7",
    "agu"   =>"8",
    "sep"   =>"9",
    "oct"   =>"10",
    "nov"   =>"11",
    "dec"   =>"12"

);
function monthdate($m,$m1){

$flag=false;
foreach ($m1 as $key=>$val){

    $val1=$val;

    if ($val1 == $m){
    $flag=true;
      break;
    }

    else if(!$val1 == $m) {
    $flag=false;}

}
if($flag == true ){
    echo $val1;}

}
echo "your birthday month is ". monthdate($month1,$month);
echo"</br>";
?>**

为什么函数没有给我任何数据?

【问题讨论】:

  • !$val1 == $m 应该是 $val1 != $m
  • @almoo900 你检查过我更新的答案了吗?
  • 是的,但我告诉过你我需要 else 一个,例如如果我的值大于 12 返回一些东西并且我解决了这个问题
  • @almoo900 检查新更新的... 1 在我的答案中添加了 3 个答案... 检查第三个

标签: php if-statement foreach


【解决方案1】:

这是一个非常奇怪的情况,可能不是你想象的那样:

if(!$val1 == $m)

你在否定$val1(它可能不会像你认为它对非布尔值所做的那样)并将其结果与$m进行比较。你确定是这个意思吗?:

if($val1 != $m)

尽管如此,你根本不需要这个条件。您原来的 if 正在比较这些值:

if ($val1 == $m)

随后,所有不相等的情况将移至else 块。如果它只是重​​复原始 if 条件的否定,则不需要在该 else 块上使用显式 if

更进一步,您的else 条件在此函数中可能根本不需要。考虑你正在实现的逻辑......一个值是false,直到找到第一个匹配结果,然后它是true,循环(和函数)完成并退出。没有理由将值重置为 false,因此整个 else 块是不必要的。


除此之外,根据您对该函数的使用,您似乎打算使用return $val1 而不是echo $val1。在您使用的代码中,这两种方法可能会产生相同的结果,因此在这里可能没有区别,但了解两者之间的区别很重要,否则您肯定会在未来遇到奇怪的错误。


编辑:根据您在下面的评论,听起来您还需要某种与数据不匹配的输入默认值。您仍然不一定需要else,您可以在函数结束时依赖控制流。例如,你目前有这个:

if ($flag == true){
    echo $val1;
}

你可以这样做:

if ($flag == true){
    echo $val1;
} else {
    echo "Not found!";
}

或者,如果您切换到return 而不是上面建议的echo,您可以用稍微少一点的代码来做同样的事情:

if ($flag == true){
    return $val1;
}
return "Not found!";

甚至:

return $flag == true ? $val1 : "Not found!";

【讨论】:

  • 所以你告诉我不需要使用 else 那么我应该如何检查 value 是否大于 12 ?
  • @almoo900:听起来你只需要一个默认的返回值。我已经更新了答案。事实上,如果你切换到return 而不是echo,那么总是返回一些东西是个好主意,所以这对你来说是一个很好的选择。谢谢!
  • 感谢您的回答。我还有一个你写的问题,它不需要使用 else 那么我什么时候应该使用 else ?
  • @almoo900:如果相反的条件为真,当您需要执行某些操作时,您会使用它。但在您的循环中,您所做的只是将$flag 的值设置为真或假。由于它已经为 false,因此您不需要将其设置为 false,因此在这种情况下不需要在 else 块中执行的操作。它不会以任何方式破坏代码,如果您觉得它使您自己的逻辑更加清晰,那么您当然可以保留它。在这种情况下,它只是多余的,仅此而已。
【解决方案2】:

你可以直接解析循环,当循环获取所需的月份 和月份名称,您可以直接中断循环,也可以从 函数

 <?php
    $month1=5;
    $month=array(
        "juan"  =>"1",
        "feb"   =>"2",
        "march" =>"3",
        "april" =>"4",
        "may"   =>"5",
        "jun"   =>"6",
        "july"  =>"7",
        "agu"   =>"8",
        "sep"   =>"9",
        "oct"   =>"10",
        "nov"   =>"11",
        "dec"   =>"12"

    );

    function monthdate($m, $m1)
    {
        foreach ($m1 as $key => $val) 
        {
            if ($val == $m) 
            {
                return $key;
            }
        }    
    }
    echo "Your birthday month is " . monthdate($month1, $month);
    ?>

但在我看来,就单词进行比较而言,使用 ID 是一个更好的选择。您可以实现与上述相同的结果,例如:

<?php
$month1=5;
$month = array(
    "1"=>"jan",
    "2"=>"feb",
    "3"=>"mar",
    "4"=>"apr",
    "5"=>"may",
    "6"=>"jun",
    "7"=>"jul",
    "8"=>"aug",
    "9"=>"sep",
    "10"=>"oct",
    "11"=>"nov",
    "12"=>"dec"
);

function monthdate($m, $m1)
{
    foreach ($m1 as $key => $val) 
    {
        if ($key == $m) 
        {
            return $val;
        }
    }    
}
echo "Your birthday month is " . monthdate($month1, $month);
?>

如果您可以选择大于 12 的值,

<?php
    $month1=5;
    $month=array(
        "juan"  =>"1",
        "feb"   =>"2",
        "march" =>"3",
        "april" =>"4",
        "may"   =>"5",
        "jun"   =>"6",
        "july"  =>"7",
        "agu"   =>"8",
        "sep"   =>"9",
        "oct"   =>"10",
        "nov"   =>"11",
        "dec"   =>"12"

    );

    function monthdate($m, $m1)
    {
        $flag='';
        foreach ($m1 as $key => $val) 
        {
            if ($val == $m) 
            {
                $flag=$key;
                break;
            }
        }

        return $flag;
    }

    $d = monthdate($month1, $month);
    if(trim($d)==null)
    {
        echo 'Not found';
    }
    else
    {
         echo "Your birthday month is " .$d ;
    }

?>

【讨论】:

  • 其他情况如何?
【解决方案3】:
$month=array(
    "juan"  =>"1",
    "feb"   =>"2",
    "march" =>"3",
    "april" =>"4",
    "may"   =>"5",
    "jun"   =>"6",
    "july"  =>"7",
    "agu"   =>"8",
    "sep"   =>"9",
    "oct"   =>"10",
    "nov"   =>"11",
    "dec"   =>"12"

);

function Search($value, $array) 
{ 
    return(array_search($value, $array)); 
}

$entered_month= '13';
if($entered_month > 0 && $entered_month <=12){
    echo "your birthday month is ". Search($entered_month,$month);
    echo"</br>";
}else{
  echo "Please enter a valid months";
  echo"</br>";
}

【讨论】:

  • 你在开玩笑吗?例如他写了 13 然后是什么?
  • 我们都知道只有 1 到 12 个月存在。代码更新请检查。
猜你喜欢
  • 2013-10-01
  • 2022-06-11
  • 2021-11-26
  • 1970-01-01
  • 2020-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-23
相关资源
最近更新 更多