php多个条件判断程序优化

开发的时候遇到个小问题,设置显示用户的名字,如果存在first_name,last_name就显示last_name.first_name,如果不存在first_name,就判断是否存在user_name,再判断nick_name,再判断email,只用以上顺序最先出现的。例如如果用户信息里面有first_name.last_name就不执行后面的判断了,就直接取出,类似下面这个逻辑。php7语法也可以。

    {
        if (@$_SERVER["HTTP_X_FORWARDED_FOR"]) {
            $ip = @$_SERVER["HTTP_X_FORWARDED_FOR"];
        } elseif (@$_SERVER["HTTP_CLIENT_IP"]) {
            $ip = @$_SERVER["HTTP_CLIENT_IP"];
        } elseif (@$_SERVER["REMOTE_ADDR"]) {
            $ip = @$_SERVER["REMOTE_ADDR"];
        } elseif (getenv("HTTP_X_FORWARDED_FOR")) {
            $ip = getenv("HTTP_X_FORWARDED_FOR");
        } elseif (getenv("HTTP_CLIENT_IP")) {
            $ip = getenv("HTTP_CLIENT_IP");
        } elseif (getenv("REMOTE_ADDR")) {
            $ip = getenv("REMOTE_ADDR");
        } else {
            $ip = "";
        }
        return $ip;
    }
阅读 4.5k
2 个回答

php7里面可以运用以下语法。

<?php
// $user_name = 'user_name';
$nick_name = 'nick_name';
$user = $user_name ?? $nick_name ?? $nick_name ?? $email;
echo "<pre>";
print_r($user);
echo "</pre>";
exit;

不是php7的话,可以按照需要的顺序组成一个数组,剔除空值后,取第一个元素。

这个方法有问题,??只判断是否有set,不管是否为空。所以建议还是使用数组,过滤空的,取第一个元素。

你这个逻辑描述得...

$array = [
    'email' => '',
    'nick_name' => 'nick_name',
    'user_name' => 'user_name',
    'last_name' => 'last_name',
];
// 干掉所有空的
array_filter($array);
// 取出 $array 第一个元素(如果有的话)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题