我现在想做一个功能,就是说根据order_status状态   判断出site_status状态
我现在做的程序是这样的
foreach($reval->result() as $row)
{
      $order_status = $row->order_status;
}
if($order_status == 10 or $order_status==7 or $order_status==8)
{
        $site_status = 1;
}
else
{
     if($order_status ==0 or $order_status==4 or $order_status==1 or $order_status==12 or $order_status==6)
     {
$site_status=2;
     }
     else
     {
if($order_status ==5)
{
     $site_status=3;
}
else
{
     $site_status=4;
}
      }
}
我想实现的是  只要有 order_status=7,8,10中的任何一个就不再判断下面的了
现在就是有可能我有2个订单需要进行这样的判断,我这样判断的话每次判断出来的site_status就是根据最后一个order_status判断的 ,有没有什么方法把order_status全部取出来才进行if判断

解决方案 »

  1.   


    $arr=array(7,8,10);
    foreach($reval->result() as $row) 

          $order_status = $row->order_status; 

    if(!in_array($order_status,$arr)) //实现的是  只要有 order_status=7,8,10中的任何一个就不再判断下面的了 { 
            $site_status = 1; 
      exit;

    else 

        if($order_status ==0 or $order_status==4 or $order_status==1 or $order_status==12 or $order_status==6) 
        { 
    $site_status=2; 
        } 
        else 
        { 
    if($order_status ==5) 

        $site_status=3; 

    else 

        $site_status=4; 

          } 
      

  2.   

    不好意思上面错了点点if(in_array($order_status,$arr)) //实现的是  只要有 order_status=7,8,10中的任何一个就不再判断下面的了 { 
            $site_status = 1; 
      exit;
      

  3.   

    楼主的程序有一点没看明白,为什么在foreach循环外面作if的判断呢?这样的话,不是只根据最后一个$order_status的来决定$site_status了吗?如果按照你最后想修改的意图,只要将if判断移到foreach里面就可以了:
    foreach($reval->result() as $row) { 
    $order_status = $row->order_status; 
    if($order_status == 10 or $order_status==7 or $order_status==8) { 
    $site_status = 1; 
    break; // 满足条件7,8,10跳出循环
    }elseif($order_status ==0 or $order_status==4 or $order_status==1 or $order_status==12 or $order_status==6) { 
    $site_status=2; 
    }elseif($order_status ==5){ 
        $site_status=3; 
    }else{ 
    $site_status=4; 


      

  4.   

    哦,我看明白楼主的意思,如果是7,8,10就不错后面的判断,如果是7,8,10就用最后一个元素做判断,代码修改如下:
    $num = count($reval->result());
    $i = 0;
    foreach($reval->result() as $row) { 
    $i++;
    $order_status = $row->order_status; 
    if($order_status == 10 or $order_status==7 or $order_status==8) { 
    $site_status = 1; 
    break; // 满足条件7,8,10跳出循环
    }elseif($i < $num){
    //如果不是最后一个元素,则继续循环
    continue;
    }else{
    if($order_status ==0 or $order_status==4 or $order_status==1 or $order_status==12 or $order_status==6) { 
    $site_status=2; 
    }elseif($order_status ==5){ 
        $site_status=3; 
    }else{ 
    $site_status=4; 

    }
      

  5.   

    哈哈……,我是来看看的,楼上的都挺NIU的!
      

  6.   

    foreach($reval->result() as $row) 

          $order_status = $row->order_status; 
    }
    ??????????你的判断在循环之外,当然就是根据最后一个order_status判断的
    你需要将判断放在循环之内
      

  7.   

    我怎么老感觉这个代码很复杂呢? $order_start_list=array();//声明一个数组存储你说的所有的订单状态
    $i=0;
    foreach($reval->result() as $row)
    {
    //$order_status = $row->order_status;
    $order_start_list[$i]=$row->order_status;
    $i++;
    }
    /**
     * 声明一个处理函数
     * $arr 刚才取得的订单号的数组
     * **/
    function change($arr)
    {
    $tag_not=array(7,8,10);  //如果订单号 存在 10,7,8 的其中一个 则不执行。 for($j=0;$j<count($arr);$j++) //循环判断订单数组
    {
    if(in_array($arr[$j],$tag_not)) //判断是否存在 7 8 10
    {
     $site_status = 1;
     return  $site_status;
    }else if($arr[$j]==5) //订单数组中有等于5的情况
    {
     $site_status = 3;
     return $site_status;
    }
    //........//依次判断。
    }
    }
    //调用方法
    $a=change($order_start_list);