PHP Eğer / Else - Bu yapmak için daha fazla verimli yolu?

5 Cevap php

Ben ancak gerçekten verimsiz gibi görünüyor, ancak ben altları yolu düşünebildiğim iyi oldu tamamlandıktan ne kadar bir kullanıcıların profilinin dışında çalışan bir eğer fonksiyonu var.

Bunu yapmak için daha iyi bir yolu nedir?

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

5 Cevap

Nasıl hakkında ...

$total = count($user);
$missing = 0;
foreach ($user as $item)
{
    if (empty($item))
        $missing++;
}

// work out a percentage complete.
$percentcomplete = intval((($total-$missing)/$total)*100);

Bu bunu yapabilir:

$percentComplete = count(array_filter($user)) / count($user);

$user tüm değerleri üzerinden ve her değer için sadece döngü toplam puan ekleyin. Eğer döngü içinde de puan bakmak diziler atar ne vermek hangi alanları tanımlanabilir.

Her alana temel bir değer atamak, ve sonra sadece boş olmayan alanlar için toplam denetimi bir sorgu çalıştırabilir.

nasıl böyle bir şey - daha uzun görünüyor, ama bir daha yönetilebilir bir şekilde her seviye için değerlerini değiştirmek izin vermez

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