鍍金池/ 問答/PHP/ 多重if判斷如何簡化代碼,減少代碼冗余

多重if判斷如何簡化代碼,減少代碼冗余

如下列代碼。充斥著各種if語句。完全不知道從哪里開始優(yōu)化..不知道有什么辦法可以解決這種多重if判斷..減少代碼冗余提升效率。下列代碼的功能就是一個查找7級上線代理的功能【查詢該用戶的上線是否存在上線代理-需要往上查詢7級,如果存在,給予一定的返現(xiàn),前三級需要通過序列化保存在一個字段,后五級只需要返現(xiàn)?!俊?/p>

public function bonusUser($user, $orderinfo, $order_goods) {
        $first_price = $this->getPrice($user['level']);
        if ($user['agentid'] != 0) {
            //一級上線
            //下線成交價
            $user_one = \think\Db::table('ims_ewei_shop_member')->where('id', $user['agentid'])->find();
            $money_one = $orderinfo['price'] / $order_goods['total'];
            //獲取當(dāng)前代理價后并計算所得傭金
            $new_price = $this->getPrice($user_one['level']);
            $return_price = 0;
            //反序列化傭金
            $all_moeny = unserialize($order_goods['commissions']);
            if ($user_one['level'] == 11) {
                $result_num = $money_one - 168;
                if ($result_num > 0) {
                    $return_price = $result_num * $order_goods['total'];
                }
            } else if ($user_one['level'] == 12) {
                $result_num = $money_one - 138;
                if ($result_num > 0) {
                    $return_price = $result_num * $order_goods['total'];
                }
            } else if ($user_one['level'] == 13) {
                $result_num = $money_one - 118;
                if ($result_num > 0) {
                    $return_price = $result_num * $order_goods['total'];
                }
            } else {
                $result_num = $money_one - 268;
                if ($result_num > 0) {
                    $return_price = $result_num * $order_goods['total'];
                }
            }
            if ($return_price > 0) {
                $send_one = $this->send_Mess($user_one['openid'], $user['nickname'], 1);
                $all_moeny['level1'] = $return_price;
            } else {
                $all_moeny['level1'] = 0;
            }
            if ($user_one['agentid'] != 0) {
                //二級上線
                $user_two = \think\Db::table('ims_ewei_shop_member')->where('id', $user_one['agentid'])->find();
                $new_price_two = $this->getPrice($user_two['level']);
                //這里判斷如果上級的會員等級比下級低的情況不考慮傭金返還
                if ($user_two['level'] > $user_one['level'] && $user_one['level'] >= $user['level']) {
                    $result_two = $new_price - $new_price_two;
                    \think\Log::write($new_price, "1j");
                    if ($result_two > 0) {
                        $all_moeny['level2'] = $result_two * $order_goods['total'];
                        $send_two = $this->send_Mess($user_two['openid'], $user['nickname'], 2);
                    } else {
                        $all_moeny['level2'] = 0;
                    }
                } elseif ($user_one['level'] <= $user['level'] && $user_two['level'] > $user['level']) {
                    //如果該級上層比任何級別代理都高的情況下
                    $result_two = $first_price - $new_price_two;
                    $all_moeny['level2'] = $result_two * $order_goods['total'];
                    if ($result_two > 0) {
                        $send_three = $this->send_Mess($user_two['openid'], $user['nickname'], 2);
                    }
                } else {
                    $all_moeny['level2'] = 0;
                }
                if ($user_two['agentid'] != 0) {
                    //三級上線
                    $user_three = \think\Db::table('ims_ewei_shop_member')->where('id', $user_two['agentid'])->find();
                    $new_price_three = $this->getPrice($user_three['level']);
                    //這里判斷如果上級的會員等級比下級低的情況不考慮傭金返還
                    if ($user_three['level'] > $user_two['level'] && $user_two['level'] >= $user_one['level'] && $user_one['level'] >= $user['level']) {
                        $result_three = $new_price_two - $new_price_three;
                        if ($result_three > 0) {
                            $all_moeny['level3'] = $result_three * $order_goods['total'];
                            $send_three = $this->send_Mess($user_three['openid'], $user['nickname'], 3);
                        } else {
                            $all_moeny['level3'] = 0;
                        }
                    } elseif ($user_two['level'] <= $user['level'] && $user_one['level'] <= $user['level'] && $user_three['level'] > $user['level']) {
                        //如果該級上層比任何級別代理都高的情況下
                        $result_three = $first_price - $new_price_three;
                        if ($result_three > 0) {
                            $all_moeny['level3'] = $result_three * $order_goods['total'];
                            $send_three = $this->send_Mess($user_three['openid'], $user['nickname'], 3);
                        } else {
                            $all_moeny['level3'] = 0;
                        }
                    } elseif ($user_one['level'] >= $user['level'] && $user_two['level'] <= $user_one['level'] && $user_three['level'] > $user_two['level']) {
                        $result_three = $new_price - $new_price_three;
                        if ($result_three > 0) {
                            $all_moeny['level3'] = $result_three * $order_goods['total'];
                            $send_three = $this->send_Mess($user_three['openid'], $user['nickname'], 3);
                        } else {
                            $all_moeny['level3'] = 0;
                        }
                    } else {
                        $all_moeny['level3'] = 0;
                    }
                    if ($user_three['agentid'] != 0) {
                        //四級上線
                        $user_four = \think\Db::table('ims_ewei_shop_member')->where('id', $user_three['agentid'])->find();
                        $new_price_four = $this->getPrice($user_four['level']);
                        //這里判斷如果上級的會員等級比下級高的情況下。傭金返還;
                        if ($user_four['level'] > $user_three['level'] && $user_three['level'] >= $user_two['level'] && $user_two['level'] >= $user_one['level'] && $user_one['level'] >= $user['level']) {
                            $result_four = $new_price_three - $new_price_four;
                            if ($result_four > 0) {
                                $four_money = $result_four * $order_goods['total'];
                                $result = $this->shop_money_log($four_money, $user_four, 4);
                                $send_four = $this->send_Mess($user_four['openid'], $user['nickname'], 4);
                            }
                        } else if ($user_three['level'] <= $user['level'] && $user_two['level'] <= $user['level'] && $user_one['level'] <= $user['level'] && $user_four['level'] > $user['level']) {
                            //如果該級上層比任何級別代理都高的情況下
                            $result_four = $first_price - $new_price_four;
                            $four_money = $result_four * $order_goods['total'];
                            if ($result_four > 0) {
                                $result = $this->shop_money_log($four_money, $user_four, 4);
                                $send_four = $this->send_Mess($user_four['openid'], $user['nickname'], 4);
                            }
                        } elseif ($user_two['level'] >= $user['level'] && $user_two['level'] >= $user_one['level'] && $user_three['level'] <= $user_two['level'] && $user_four['level'] > $user_two['level']) {
                            $result_four = $new_price_two - $new_price_four;
                            $four_money = $result_four * $order_goods['total'];
                            if ($result_four > 0) {
                                $result = $this->shop_money_log($four_money, $user_four, 4);
                                $send_four = $this->send_Mess($user_four['openid'], $user['nickname'], 4);
                            }
                        } elseif ($user_one['level'] >= $user['level'] && $user_three['level'] <= $user_one['level'] && $user_one['level'] >= $user_two['level'] && $user_four['level'] > $user_one['level']) {
                            $result_four = $new_price - $new_price_four;
                            $four_money = $result_four * $order_goods['total'];
                            if ($result_four > 0) {
                                $result = $this->shop_money_log($four_money, $user_four, 4);
                                $send_four = $this->send_Mess($user_four['openid'], $user['nickname'], 4);
                            }
                        }
                        if ($user_four['agentid'] != 0) {
                            //五級上線
                            $user_five = \think\Db::table('ims_ewei_shop_member')->where('id', $user_four['agentid'])->find();
                            $new_price_five = $this->getPrice($user_five['level']);
                            if ($user_five['level'] > $user_four['level'] && $user_four['level'] >= $user_three['level'] && $user_three['level'] >= $user_two['level'] && $user_two['level'] >= $user_one['level'] && $user_one['level'] >= $user['level']) {
                                $result_five = $new_price_four - $new_price_five;
                                $five_money = $result_five * $order_goods['total'];
                                if ($result_five > 0) {
                                    $result = $this->shop_money_log($five_money, $user_five, 5);
                                    $send_five = $this->send_Mess($user_five['openid'], $user['nickname'], 5);
                                }
                            } elseif ($user_four['level'] <= $user['level'] && $user_three['level'] <= $user['level'] && $user_two['level'] <= $user['level'] && $user_one['level'] <= $user['level'] && $user_five['level'] >= $user['level']) {
                                //如果該級上層比任何級別代理都高的情況下
                                $result_five = $first_price - $new_price_five;
                                $five_money = $result_five * $order_goods['total'];
                                if ($result_five > 0) {
                                    $result = $this->shop_money_log($five_money, $user_five, 5);
                                    $send_five = $this->send_Mess($user_five['openid'], $user['nickname'], 5);
                                }
                            } elseif ($user_two['level'] >= $user['level'] && $user_two['level'] >= $user_one['level'] && $user_three['level'] <= $user_two['level'] && $user_four['level'] <= $user_two['level'] && $user_five['level'] > $user_two['level']) {
                                //如果該級上層比任何級別代理都高的情況下
                                $result_five = $new_price_two - $new_price_five;
                                $five_money = $result_five * $order_goods['total'];
                                if ($result_five > 0) {
                                    $result = $this->shop_money_log($five_money, $user_five, 5);
                                    $send_five = $this->send_Mess($user_five['openid'], $user['nickname'], 5);
                                }
                            } elseif ($user_one['level'] >= $user['level'] && $user_three['level'] <= $user_one['level'] && $user_one['level'] >= $user_two['level'] && $user_four['level'] <= $user_one['level'] && $user_five['level'] > $user_two['level']) {
                                //如果該級上層比任何級別代理都高的情況下
                                $result_five = $new_price - $new_price_five;
                                $five_money = $result_five * $order_goods['total'];
                                if ($result_five > 0) {
                                    $result = $this->shop_money_log($five_money, $user_five, 5);
                                    $send_five = $this->send_Mess($user_five['openid'], $user['nickname'], 5);
                                }
                            } elseif ($user_three['level'] >= $user['level'] && $user_three['level'] >= $user_one['level'] && $user_three['level'] >= $user_two['level'] && $user_four['level'] <= $user_three['level'] && $user_five['level'] > $user_three['level']) {
                                //如果該級上層比任何級別代理都高的情況下
                                $result_five = $new_price_three - $new_price_five;
                                $five_money = $result_five * $order_goods['total'];
                                if ($result_five > 0) {
                                    $result = $this->shop_money_log($five_money, $user_five, 5);
                                    $send_five = $this->send_Mess($user_five['openid'], $user['nickname'], 5);
                                }
                            }
                            //6-7級返現(xiàn)
                            if ($user_five['agentid'] != 0) {
                                //查詢第六級的等級
                                $user_six = \think\Db::table('ims_ewei_shop_member')->where('id', $user_five['agentid'])->find();
                                $new_price_six = $this->getPrice($user_six['level']);
                                if ($user_six['level'] > $user_five['level'] && $user_five['level'] >= $user_four['level'] && $user_four['level'] >= $user_three['level'] && $user_three['level'] >= $user_two['level'] && $user_two['level'] >= $user_one['level'] && $user_one['level'] >= $user['level']) {
                                    $result_six = $new_price_five - $new_price_six;
                                    $six_money = $result_six * $order_goods['total'];
                                    if ($result_six > 0) {
                                        $result = $this->shop_money_log($six_money, $user_six, 6);
                                        $send_five = $this->send_Mess($user_six['openid'], $user['nickname'], 6);
                                    }
                                } elseif ($user_five['level'] <= $user['level'] && $user_four['level'] <= $user['level'] && $user_three['level'] <= $user['level'] && $user_two['level'] <= $user['level'] && $user_one['level'] <= $user['level'] && $user_six['level'] >= $user['level']) {
                                    //如果該級上層比任何級別代理都高的情況下
                                    $result_six = $first_price - $new_price_six;
                                    $six_money = $result_six * $order_goods['total'];
                                    if ($result_six > 0) {
                                        $result = $this->shop_money_log($six_money, $user_six, 6);
                                        $send_five = $this->send_Mess($user_six['openid'], $user['nickname'], 6);
                                    }
                                } elseif ($user_two['level'] >= $user['level'] && $user_two['level'] >= $user_one['level'] && $user_three['level'] <= $user_two['level'] && $user_four['level'] <= $user_two['level'] && $user_five['level'] <= $user_two['level'] && $user_six['level'] > $user_two['level']) {
                                    //如果該級上層比任何級別代理都高的情況下
                                    $result_six = $new_price_two - $new_price_six;
                                    $six_money = $result_six * $order_goods['total'];
                                    if ($result_six > 0) {
                                        $result = $this->shop_money_log($six_money, $user_six, 6);
                                        $send_five = $this->send_Mess($user_six['openid'], $user['nickname'], 6);
                                    }
                                } elseif ($user_one['level'] >= $user['level'] && $user_three['level'] <= $user_one['level'] && $user_one['level'] >= $user_two['level'] && $user_four['level'] <= $user_one['level'] && $user_five['level'] <= $user_one['level'] && $user_six['level'] > $user_two['level']) {
                                    //如果該級上層比任何級別代理都高的情況下
                                    $result_six = $new_price - $new_price_six;
                                    $six_money = $result_six * $order_goods['total'];
                                    if ($result_six > 0) {
                                        $result = $this->shop_money_log($six_money, $user_six, 6);
                                        $send_five = $this->send_Mess($user_six['openid'], $user['nickname'], 6);
                                    }
                                } elseif ($user_three['level'] >= $user['level'] && $user_three['level'] >= $user_one['level'] && $user_three['level'] >= $user_two['level'] && $user_four['level'] <= $user_three['level'] && $user_five['level'] <= $user_three['level'] && $user_six['level'] > $user_three['level']) {
                                    //如果該級上層比任何級別代理都高的情況下
                                    $result_six = $new_price_three - $new_price_six;
                                    $six_money = $result_six * $order_goods['total'];
                                    if ($result_six > 0) {
                                        $result = $this->shop_money_log($six_money, $user_six, 6);
                                        $send_five = $this->send_Mess($user_six['openid'], $user['nickname'], 6);
                                    }
                                } elseif ($user_four['level'] >= $user['level'] && $user_four['level'] >= $user_one['level'] && $user_four['level'] >= $user_two['level'] && $user_four['level'] >= $user_three['level'] && $user_five['level'] <= $user_four['level'] && $user_six['level'] > $user_four['level']) {
                                    //如果該級上層比任何級別代理都高的情況下
                                    $result_six = $new_price_four - $new_price_six;
                                    $six_money = $result_six * $order_goods['total'];
                                    if ($result_six > 0) {
                                        $result = $this->shop_money_log($six_money, $user_six, 6);
                                        $send_five = $this->send_Mess($user_six['openid'], $user['nickname'], 6);
                                    }
                                }
                                if ($user_six['agentid'] != 0) {
                                    //第七級查詢
                                    $user_seven = \think\Db::table('ims_ewei_shop_member')->where('id', $user_six['agentid'])->find();
                                    $new_price_seven = $this->getPrice($user_seven['level']);
                                    if ($user_seven['level'] >= $user_six['level'] && $user_six['level'] >= $user_five['level'] && $user_five['level'] >= $user_four['level'] && $user_four['level'] >= $user_three['level'] && $user_three['level'] >= $user_two['level'] && $user_two['level'] >= $user_one['level'] && $user_one['level'] >= $user['level']) {
                                        $result_seven = $new_price_six - $new_price_seven;
                                        $seven_money = $result_seven * $order_goods['total'];
                                        if ($result_seven > 0) {
                                            $result = $this->shop_money_log($seven_money, $user_seven, 7);
                                            $send_seven = $this->send_Mess($user_seven['openid'], $user['nickname'], 7);
                                        }
                                    } elseif ($user_six['level'] <= $user['level'] && $user_five['level'] <= $user['level'] && $user_four['level'] <= $user['level'] && $user_three['level'] <= $user['level'] && $user_two['level'] <= $user['level'] && $user_one['level'] <= $user['level'] && $user_seven['level'] >= $user['level']) {
                                        //如果該級上層比任何級別代理都高的情況下
                                        $result_seven = $first_price - $new_price_seven;
                                        $seven_money = $result_seven * $order_goods['total'];
                                        if ($result_seven > 0) {
                                            $result = $this->shop_money_log($seven_money, $user_seven, 7);
                                            $send_seven = $this->send_Mess($user_seven['openid'], $user['nickname'], 7);
                                        }
                                    } elseif ($user_two['level'] >= $user['level'] && $user_two['level'] >= $user_one['level'] && $user_three['level'] <= $user_two['level'] && $user_four['level'] <= $user_two['level'] && $user_five['level'] <= $user_two['level'] && $user_six['level'] <= $user_two['level'] && $user_seven['level'] > $user_two['level']) {
                                        //如果該級上層比任何級別代理都高的情況下
                                        $result_seven = $new_price_two - $new_price_seven;
                                        $seven_money = $result_seven * $order_goods['total'];
                                        if ($result_seven > 0) {
                                            $result = $this->shop_money_log($seven_money, $user_seven, 7);
                                            $send_seven = $this->send_Mess($user_seven['openid'], $user['nickname'], 7);
                                        }
                                    } elseif ($user_one['level'] >= $user['level'] && $user_three['level'] <= $user_one['level'] && $user_one['level'] >= $user_two['level'] && $user_four['level'] <= $user_one['level'] && $user_five['level'] <= $user_one['level'] && $user_six['level'] <= $user_one['level'] && $user_seven['level'] > $user_two['level']) {
                                        //如果該級上層比任何級別代理都高的情況下
                                        $result_seven = $new_price - $new_price_seven;
                                        $seven_money = $result_seven * $order_goods['total'];
                                        if ($result_seven > 0) {
                                            $result = $this->shop_money_log($seven_money, $user_seven, 7);
                                            $send_seven = $this->send_Mess($user_seven['openid'], $user['nickname'], 7);
                                        }
                                    } elseif ($user_three['level'] >= $user['level'] && $user_three['level'] >= $user_one['level'] && $user_three['level'] >= $user_two['level'] && $user_four['level'] <= $user_three['level'] && $user_five['level'] <= $user_three['level'] && $user_six['level'] <= $user_three['level'] && $user_seven['level'] > $user_three['level']) {
                                        //如果該級上層比任何級別代理都高的情況下
                                        $result_seven = $new_price_three - $new_price_seven;
                                        $seven_money = $result_seven * $order_goods['total'];
                                        if ($result_seven > 0) {
                                            $result = $this->shop_money_log($seven_money, $user_seven, 7);
                                            $send_seven = $this->send_Mess($user_seven['openid'], $user['nickname'], 7);
                                        }
                                    } elseif ($user_four['level'] >= $user['level'] && $user_four['level'] >= $user_one['level'] && $user_four['level'] >= $user_two['level'] && $user_four['level'] >= $user_three['level'] && $user_five['level'] <= $user_four['level'] && $user_six['level'] <= $user_four['level'] && $user_seven['level'] > $user_four['level']) {
                                        //如果該級上層比任何級別代理都高的情況下
                                        $result_seven = $new_price_four - $new_price_seven;
                                        $seven_money = $result_seven * $order_goods['total'];
                                        if ($result_seven > 0) {
                                            $result = $this->shop_money_log($seven_money, $user_seven, 7);
                                            $send_seven = $this->send_Mess($user_seven['openid'], $user['nickname'], 7);
                                        }
                                    } elseif ($user_five['level'] >= $user['level'] && $user_five['level'] >= $user_one['level'] && $user_five['level'] >= $user_two['level'] && $user_five['level'] >= $user_three['level'] && $user_five['level'] >= $user_four['level'] && $user_six['level'] <= $user_five['level'] && $user_seven['level'] > $user_five['level']) {
                                        //如果該級上層比任何級別代理都高的情況下
                                        $result_seven = $new_price_five - $new_price_seven;
                                        $seven_money = $result_seven * $order_goods['total'];
                                        if ($result_seven > 0) {
                                            $result = $this->shop_money_log($seven_money, $user_seven, 7);
                                            $send_seven = $this->send_Mess($user_seven['openid'], $user['nickname'], 7);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            $order_goods_data['commissions'] = serialize($all_moeny);
            \think\Db::table('ims_ewei_shop_order_goods')->where('id', $order_goods['id'])->update($order_goods_data);
            return true;
        }
        return false;
    }
回答
編輯回答
網(wǎng)妓

一個最直接有效的方法,以你的代碼為例:

if($user['agentid']!=0)
{//一級上線
    ... //一級上線邏輯
}
return false;

你可以轉(zhuǎn)換成

if($user['agentid']==0)
{
    return false;
}
... //一級上線邏輯

這樣 一級上線 的邏輯不就少了一層嵌套了?里面的嵌套同理可以優(yōu)化


最后,要告訴你的是不要亂打標(biāo)簽,你這是 javascript 問題嗎?

2018年2月7日 09:58
編輯回答
舊城人

代理關(guān)系和業(yè)務(wù)相關(guān),沒看明白你代碼

$level = $user_one['level'];
$levelArray = [11=>168, 12=>138];

if(isset($levelArray[$level])){
    $subNum = $levelArray[$level];
} else {
    $subNum = 268;
}

$result_num=$money_one-$subNum;
if($result_num>0){
    $return_price=$result_num*$order_goods['total'];
}
2017年9月19日 03:52
編輯回答
澐染

合理使用switch和三元運算符 還有短路運算

多個if else 的時候使用switch 判斷的時候使用三元運算符 PHP7就更簡單了!

2017年4月12日 15:19