Birden IFS yerine daha verimli bir şekilde

5 Cevap php

Bu hangi harf notu çıktı görmek için sadece basit bir kontroldür. Hedefe ulaşmak için daha hızlı ve daha etkili bir yolu var mı?

if ( $grade >= 90 ) {
        echo "A";
    } elseif ( $grade >= 80 ) {
        echo "B";
    } elseif ( $grade >= 70 ) {
        echo "C";
    } else {
        echo "Failed."
    }

5 Cevap

Bu gerçek soruya cevap değil ama ben burada bir hata yapıyoruz düşünüyorum:

Eğer gerçekten PHP kullanırken, bir hız için tasarlanmış bir dil, ancak kullanım kolaylığı için tasarlanmış bir değil verimlilik düşünmeye edilmemelidir. Hatta daha çok uygulama henüz bitmiş değil ve bu kod parçası (örneğin, profiler kullanarak xdebug) bütün uygulama yavaşlar doğrulanmadı varsa.

Bu tür gelişmeler mikro optimizasyonlar olacaktır. Ben o zaman verimlilik ve netlik her ikisi için en iyi çözümü buldum.

Ben doğru zaten yapıyoruz diğer posterleri ile katılıyorum. Ancak, bu gibi durumlarda değil ghostdog74 @ yukarıda yapmaya çalıştığım ne aksine, bir ilişkisel dizi içinde bir endeks olarak kullanılabilecek bir değere $grade dönüştürme deneyebilirsiniz olabilir.

$gradeindex = (int)$grade / 10; // 10 since we want 10-19 = 1, etc..
$gradenames = array('10' => 'A+', '9' => 'A', '8' => B, ..... );

Bunlardan çok özdeş olduğundan Ancak, muhtemelen kullandığınız bir switch()

$gradeindex = (int)$grade / 10; // 10 since we want 10-19 = 1, etc..
switch ($gradeindex) {
  case 10:
  case 9:
    $gradename = 'A';
    break;
  case 8:
    $gradename = 'B';
    break;
  case 7:
    $gradename = 'C';
    break;
  default:
    $gradename = 'Failed';
}
echo $gradename;

Ama zaten dedi, temelde mevcut if deyimi ile en iyi konum.

Ben ne yaptığınızı yapmak için garip ninja yolu vardır eminim, ama seninki kesinlikle en iyisidir. Okumak için en net, ve performans akıllıca maddeye çok hızlı.

Şahsen, ben bu amaç için birden fazla getiri ile bir işlevi kullanmak düşünüyorum:

function intGradeToStrGrade($grade) {
    if ($grade >= 90) return "A";
    if ($grade >= 80) return "B";
    ...
}

Bir işlevi birden döner OK veya değilseniz Ancak, burada SO bazı tartışmalar olmuştur. Sizin seçiminiz. Ben bu bir çizilmiş-out deyimi ise çok daha temiz olduğunu düşünüyorum.