请问这个问题怎么解决

leaf_2008 2009-08-23 11:06:41
我现在想做一个功能,就是说根据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判断
...全文
88 点赞 收藏 12
写回复
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
leaf_2008 2009-10-28
谢谢6楼的和2楼的 你们的答案都正确。
回复
woshiguozhongbin 2009-08-24
[Quote=引用 9 楼 xuzuning 的回复:]
foreach($reval->result() as $row)
{
      $order_status = $row->order_status;
}
??????????

你的判断在循环之外,当然就是根据最后一个order_status判断的
你需要将判断放在循环之内



[/Quote]
说对了。
回复
woshiguozhongbin 2009-08-24
我怎么老感觉这个代码很复杂呢?

$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);
回复
xuzuning 2009-08-24
foreach($reval->result() as $row)
{
$order_status = $row->order_status;
}
??????????

你的判断在循环之外,当然就是根据最后一个order_status判断的
你需要将判断放在循环之内


回复
llj480028 2009-08-24
哈哈……,我是来看看的,楼上的都挺NIU的!
回复
babysc1 2009-08-24
牛B我的2好友就是猛!
回复
CunningBoy 2009-08-23
哦,我看明白楼主的意思,如果是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;
}
}
}
回复
CunningBoy 2009-08-23
楼主的程序有一点没看明白,为什么在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;
}
}

回复
dzxccsu 2009-08-23
不好意思上面错了点点

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

{
$site_status = 1;
exit;
}

回复
dzxccsu 2009-08-23

$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;
}
}
}



回复
无·法 2009-08-23
不清楚,帮顶一下
回复
jumpheightway 2009-08-23
实现本来很简单
就是想的过于复杂
回复
发动态
发帖子
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
社区公告
暂无公告