代码之家  ›  专栏  ›  技术社区  ›  Pez Cuckow

php if/else-更有效的方法?

  •  1
  • Pez Cuckow  · 技术社区  · 15 年前

    我有一个if函数,它可以计算出一个用户配置文件中有多少是完成的,但是我在下面介绍的方法是我能想到的最好的方法,但是它看起来效率很低。

    更好的方法是什么?

    if($user['first_name']!==""&&$user['last_name']!==""&&$user['pemail']!==""&&$user['dob']!==""&&$user['ambitions']!==""&&$user['memories']!==""&&$user['thoughts']!==""&&$user['message_1']!=="0"&&$user['message_2']!=="0"&&$user['message_3']!=="0"&&$user['v1']!=="0"&&$user['v2']!=="0"&&$user['v3']!=="0"&&$user['v4']!=="0"&&$user['v5']!=="0"&&$user['v6']!=="0"&&$user['v7']!=="0"&&$user['v8']!=="0"&&$user['v9']!=="0"&&$user['image_1']!==""&&$user['image_2']!==""&&$user['image_3']!=="") {
        $completed = 4;
    } elseif($user['first_name']!==""&&$user['last_name']!==""&&$user['pemail']!==""&&$user['dob']!==""&&$user['ambitions']!==""&&$user['memories']!==""&&$user['thoughts']!==""&&$user['v1']!=="0"&&$user['v2']!=="0"&&$user['v3']!=="0"&&$user['v4']!=="0"&&$user['v5']!=="0"&&$user['v6']!=="0"&&$user['v7']!=="0"&&$user['v8']!=="0"&&$user['v9']!=="0"&&$user['image_1']!==""&&$user['image_2']!==""&&$user['image_3']!=="") {
        $completed = 3;
    } elseif($user['first_name']!==""&&$user['last_name']!==""&&$user['pemail']!==""&&$user['dob']!==""&&$user['ambitions']!==""&&$user['memories']!==""&&$user['thoughts']!==""&&$user['message_1']!=="0"&&$user['message_2']!=="0"&&$user['message_3']!=="0"&&$user['image_1']!==""&&$user['image_2']!==""&&$user['image_3']!=="") {
        $completed = 2;
    } elseif($user['first_name']!==""&&$user['last_name']!==""&&$user['pemail']!==""&&$user['dob']!==""&&$user['ambitions']!==""&&$user['memories']!==""&&$user['thoughts']!==""&&$user['image_1']!==""&&$user['image_2']!==""&&$user['image_3']!=="") {
        $completed = 1;
    } else {
        $completed = 0;
    }
    
    6 回复  |  直到 14 年前
        1
  •  2
  •   bobince    15 年前
    function allset($arr, $names) {
        foreach ($names as $name)
            if ($arr[$name]=='')
                return FALSE;
        return TRUE;
    }
    
    $completed= 0;
    if (allset($user, array('first_name', 'last_name', 'pemail', 'dob', 'ambitions', 'memories', 'thoughts', 'image_1', 'image_2', 'image_3'))) {
        $completed+= 1;
        if (allset($user, array('message_1', 'message_2', 'message_3')))
            $completed+= 1;
        if (allset($user, array('v1', 'v2', 'v3', 'v4', 'v5', 'v6', 'v7', 'v8', 'v9')))
            $completed+= 2;
    }
    
        2
  •  11
  •   Rik Heywood    15 年前

    怎么样。。。

    $total = count($user);
    $missing = 0;
    foreach ($user as $item)
    {
        if (empty($item))
            $missing++;
    }
    
    // work out a percentage complete.
    $percentcomplete = intval((($total-$missing)/$total)*100);
    
        3
  •  4
  •   nickf    15 年前

    这可能会做到:

    $percentComplete = count(array_filter($user)) / count($user);
    
        4
  •  2
  •   Asbjørn Ulsberg    15 年前

    只需循环遍历 $user 每一个值加上它的总分。您可以定义哪些字段提供在循环中查找分数的数组中的分数。

        5
  •  0
  •   Paul McMillan    15 年前

    您可以为每个字段指定一个基线值,然后简单地运行一个查询来检查非空字段的总数。

        6
  •  0
  •   Ramuns Usovs    15 年前

    像这样的东西怎么样?它看起来更长,但它确实能让你以更易于管理的方式更改每个级别的值

    $l1 = array(
        'first_name','last_name','pemail','dob','ambitions',
        'memories','thoughts','image_1','image_2','image_3'
    );
    $l2 = array_merge(
        array(
            'message_1','message_2','message_3',
        )
        ,$l1);
    $l3 = array_merge(
        array(
            'v1','v2','v3','v4','v5','v6','v7','v8','v9'            
        ),
        $l1
    );
    $l4 = array_unique(array_merge($l2,$l3));
    
    $completed = 4;
    for ($i = 4; $i > 0 $i-- ) {
        $arr = 'l'.$i;
        foreach ( $$arr as $key ) {
            if ( $user[$key] == '' || $user[$key] == '0' ) {
                $completed--;
                break;
            } 
        }
        if ( $i == $completed ) {
            break;
        } 
    }