0

ここではあまり熟練した PHP プログラマーではありません。自分のサイトにスクリーンショット用のシステムがあります。GET と 'switch' を使用して、スクリーンショットをリンク パラメーターから表示することにしました。このような:

    switch($_GET['scid']) {
    case "1":
    $sc_id_txt = "Default screenshot";
    $picname = "u0"; //Image name
    break;
    case "2":
    $sc_id_txt = "Screenshot no 2";
    $picname = "2";
    break;
    case "3":
    etc..

(最大) 20 個のスクリーンショット用のコードがたくさんあります。さらに、システムでアイテムごとに最大 100 個のスクリーンショットを処理できるようにしたいと考えています。

より少ないコード行で上記を達成するためのより良い方法はありますか?

4

3 に答える 3

3

大量のデータがあり、動的である場合は、データベースの使用を検討してください。これらの値が静的であるか、データベースが必要ない場合は、配列を使用してそれらの値を格納します。

$screenshots = array(
1 => array('txt' => 'Default Screenshot','pic' => 'u0'),
2 => array('txt' => 'Screenshot2','pic' => '2')
);

$scid = (int)$_GET['scid'];
if($scid == 0 || !array_key_exists($scid, $screenshots))
{
 //Error.
}
else
{
 $screenshot = $screenshots[$scid];
 echo $screenshot['txt'];
 echo $screenshot['pic'];
}
于 2013-11-03T13:35:19.723 に答える
1

残りのすべてが同じパターンに従う場合、必要な if-else は 1 つだけです。

$scid = (int)$_GET['scid'];
if ($scid == 1) {
    $sc_id_txt = "Default screenshot";
    $picname = "u0";
} else if ($scid > 1 && $scid <= 100) {
    $sc_id_txt = "Screenshot no " . $scid;
    $picname = (string)$scid;
}
于 2013-11-03T13:40:32.163 に答える
1

より短い代替手段は必要ないと思いますSWITCH-する必要がありますDRY(繰り返さないでください)。

例:

ケース 2 & 3

[...]
case "2":
    $sc_id_txt = "Screenshot no 2";
    $picname = "2";
    break;
case "3":
    $sc_id_txt = "Screenshot no 3";
    $picname = "3";
    break;
case "4": 
[...]

これは繰り返す意味がない..

だからこのようにしてください

$scid = (int)$_GET['scid'];
[...]
else if(1 <= $scid and $scid <= 20) {
   $sc_id_text = "Screenshot no {$scid}";
   $pic_name = $scid;
}
[...]
于 2013-11-03T13:39:28.257 に答える