2009-04-29 2 views
3

Wie kann ich den folgenden Code neu einteilen, um ihn übersichtlicher und wartungsfreundlicher zu machen?Wie kann ich einen String ganz einfach in PHP einem String zuordnen?

if ($row['vocation'] == 1) $vocation = "sorcerer"; 
if ($row['vocation'] == 2) $vocation = "druid"; 
if ($row['vocation'] == 3) $vocation = "paladin"; 
if ($row['vocation'] == 4) $vocation = "knight"; 

if ($row['vocation'] == 5) $vocation = "master sorcerer"; 
if ($row['vocation'] == 6) $vocation = "elder druid"; 
if ($row['vocation'] == 7) $vocation = "royal paladin"; 
if ($row['vocation'] == 8) $vocation = "elite knight"; 
else $vocation = "none"; 
+0

oooh Ich hoffe, dass der ursprüngliche Fragesteller diese Frage wieder finden kann, dachte nicht darüber nach, als ich den Titel änderte – thomasrutter

Antwort

17

Ich würde empfehlen, ein Array verwendet wird, wie folgt aus:

static $vocations = array(
    1 => 'sorceror', 
    2 => 'druid', 
    3 => 'paladin', 
    4 => 'knight', 
    5 => 'master sorceror', 
    6 => 'elder druid', 
    7 => 'royal paladin', 
    8 => 'elite knight', 
); 

$vocation = 
    isset($vocations[$row['vocation']]) ? $vocations[$row['vocation']] : 'none'; 
+0

Dies mit dem hinzugefügten Kommentar, dass, wenn diese aus einer Datenbank stammen, Sie es besser in einer Berufungstabelle speichern und beitreten könnten es. – Mark

+0

+1 Schönes Beispiel, ich übergebe es dir;] –

0

Starten Sie Ihr Projekt aus Recht, die Verwendung const nun diese numerische Konstanten darstellen und sich einige Kopfschmerzen auf der ganzen Linie speichern. (Zusätzlich zu dem mit dem Schalter/Fall wie andere vorgeschlagen haben)

2

Hier ist ein Beispiel verwendet, um einen Schalter zu tun:

switch ($row['vocation']) { 
    case 1: 
     $vocation = "sorcerer"; 
     break; 
    case 2: 
     $vocation = etc.. 
    default: 
     $vocation = "none"; 
} 

Dies ist eine gemeinsame Sache für viele Sprachen wie C, Java und C# und viele andere auch.

+0

+1 für das Beispiel, aber nichts, was die Lesbarkeit des Codes vermasselt, ist eine Verbesserung, es sei denn, die Fälle werden wesentlich komplizierter als das Setzen von $ vocation. – Mark

1

Folgendes Stück könnte ein wenig besser sein. 8 Elemente sind in Ordnung, aber was ist, wenn die Liste 1000.

$list = array("sorcerer", "druid", ...); 

$vocation = "none"; 

if($row['vocation'] <= count($list)){ 
    $vocation = $list[$row['vocation'] - 1]; 
} 
0

enthält, wurde ich den Vorschlag mit Array verwenden würde, und ich würde Konstanten verwenden, um die Integer-Werte wie folgt darstellen:

define('VOCATION_SORCEROR', 1); 
define('VOCATION_DRUID', 2); 
define('VOCATION_PALADIN', 3); 

$vocations = array(
    VOCATION_SORCEROR => 'sorceror', 
    VOCATION_DRUID => 'druid', 
    VOCATION_PALADIN => 'paladin' 
); 
Verwandte Themen