Belirtilen dize içine endeksi çevirmek için temizleyici bir yolu?

7 Cevap php

Ben bir daha temiz bir şekilde bunu başarabilir? Gerçekten appricated olacaktır.

    switch($vocation) {

	    case 1: $vocation = "Sorcerer";        break;
		case 2: $vocation = "Druid";           break;		
		case 3: $vocation = "Paladin";         break;			
		case 4: $vocation = "Knight";          break;			
		case 5: $vocation = "Master Sorcerer"; break;			
		case 6: $vocation = "Elder Druid";     break;			
		case 7: $vocation = "Royal Paladin";   break;			
		case 8: $vocation = "Elite Knight";    break;

	}

Teşekkürler!

ve başlık hakkında üzgünüm daha iyi bir anlamaya kalamadım

7 Cevap

Yerine switch deyimi bir dizi kullanabilirsiniz.

$vocations = array("Sorcerer", "Druid" ...);
$vocationStr = $vocations[$vocation - 1];

Veya

$vocations = array(1 => "Sorcerer", 2 => "Druid" ...);
$vocationStr = $vocations[$vocation];

Onlar programında iki farklı kavram büyük olasılıkla gibi Şahsen ben, iki tür (tamsayılar ve String) başvurmak için $ mesleğin yeniden kullanımı karşıyım.

Ben de onun yerine bu değerler için bir Enum türü oluşturarak tavsiye ediyorum, ama bu bağlamda bağlıdır.

Eh, bir seçeneği (hiçbir bağlam olduğu gibi gerçekten emin değil) için bu kullanarak konum ne bağlı tarafından okunabilir (o XML, metin dosyası, vb olabilir) bir yapılandırma dosyasında meslekler kullanılabilir olmasıdır anında sistem. Hiç bir ek meslek eklemek istiyorsanız bu şekilde, sadece metin dosyasını güncelleyebilir ve size kaynak yeniden ve / veya dağıtmanız gerekmez.

Constatants kullanmak yerine switch deyimi düz tamsayılar, en azından, önceden de belirtildiği gibi, bir dizi kullanarak, ya da ya. Yani bir şey gibi:

define("SORCERER", 1);
define("DRUID", 2);
...
define("RPALADIN", 7);
define("EKNIGHT", 8);

switch($vocation) {
    case SORCERER: $vocation="Sorcerer"; break;
    case DRUID: $vocation="Druid"; break;
    ...
    case RPALADIN: $vocation="Royal Paladin"; break;
    case EKNIGHT: $vocation="Elder Knight"; break;
}

Sınıflar arasında yeni sınıflar ve saflarını ekleyerek bu şekilde biraz daha kolaydır.

Bu listede bulunmayan meslek başlangıç ​​değerleri için bir tuzak verir.

$vocations = array(1=>"Sorcerer", 2=>"Druid", ...);
if (array_key_exists($vocation, $vocations)) {
  $vocation = $vocations[$vocation];
} else {
  $vocation = 'Not found';
}

Bir dizi sıralı tuşları için çalışmak, ama başka bir ilişkisel dizi (hash) kullanabilirsiniz.

%vocations = array("key1"=>"value1", "key2"=>"value2", ...);
$vocationVal = $vocations{$vocationKey};

EDIT: Yukarıda bir Perl sözdizimi, php sözdizimi aşağıdaki gibidir:

$vocations = array(key1 => "value1", key2 => "value2", ...);
$vocationVal = $vocations[$vocationKey];

Ben burada görmedim Başka bir seçenek tablo verileri tutmaktır. Liste büyük olur eğer yardımcı olacaktır.

vocation_id        vocation_name
     1               sorcerer
     2                druid
    etc....

select vocation_name form vocations where vocation_id=3