PHP CASE deyimi SIFIR değerleri ile çalışmıyor

5 Cevap php

Burada neler oluyor anlamıyorum. Mantıken, bu bana hiç mantıklı değil.

<?php
$level = 0;

switch ($level) {

  case $level > 80: $answer = 'high'; break;
  case $level > 60: $answer = 'moderate-to-high'; break;
  case $level > 40: $answer = 'moderate'; break;
  case $level > 20: $answer = 'low-to-moderate'; break;
  default: $answer = 'low'; break;
}   
echo $answer;
?>

Ne $ seviyesi == 0, bu "yüksek" döndürür. Bu benim için hiçbir anlam ifade etmiyor. Birisi burada ne oluyor açıklayabilir misiniz?

5 Cevap

Değişim switch ($level) switch (true) ve bu çalışacaktır.

switch statements perform equality tests on the values in the cases. PHP is evaluating your > karşılaştırılması, böylece case $level > 80 olur case false. false 0 eşit olarak kabul, böylece ilk vaka eşleşir edilir.

Miktar sonra case sadece değer değil, bir boolean ifadesi olması gerekir. Ben PHP $level gerçekten az değil beri, case 0 (yani, yanlış oluyor ki case $level > 80 case ($level > 80) olarak değerlendirmekte olduğunu tahmin ediyorum 80 den) ve böylece ilk davayı eşleşen ediyoruz.

Eğer php yapabilirsiniz emin misin?

Ben sadece manual of switch kontrol ve ayrı bir değer sağlamak zorunda.

Gibi bir şey haline tekrar yazabilirsiniz eğer sanırım:

$levelDivTwenty = intval($level/20);
$levelDivTwenty = ($levelDivTwenty>4)?4:$levelDivTwenty;

ve bir o harf.

switch ($levelDivTwenty) {
  case 4: //same as $level > 80 before...
  case 3: //>60 etc...
}

Diğerleri işaret gibi switch gibi kullanabilirsiniz, ama nasıl bu gibi tanımlama hakkında değil:

<?
$level = 21;
$answers = array('low', 'low-to-moderate',
                 'moderate', 'moderate-to-high', 'high');

echo $answers[intval(($level-1)/20)];
?>


Note, intval() olacak iç $level = 0, o zaman ifade -1/20, which is less then -1 and therefore will be rounded to 0 edin.

Bu anahtar kullanılmak üzere tasarlanmıştır kadar çok değildir. Bu belirli bir değer alternatifi değerlendirmek için.

Kullanılır bir If / else burada eğer, bunun yerine bir gibi bir switch işi yapmak için hayatınızı zorlaştıran.