0

这里不是太熟练的 PHP 程序员。我在我的网站上有一个截图系统。使用 GET 和“切换”,我决定从链接参数中查看屏幕截图。像这样:

    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

我认为您不需要更短的替代方案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 回答
1

如果其余的都遵循相同的模式,则只需要一个 if-else:

$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 回答