这里没有太熟练的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个屏幕截图。
有更好的方法可以用更少的代码行来实现上述目标吗?
答案 0 :(得分: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'];
}
答案 1 :(得分: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":
[...]
这个dosnt有意义重复..
所以就这样做吧
$scid = (int)$_GET['scid'];
[...]
else if(1 <= $scid and $scid <= 20) {
$sc_id_text = "Screenshot no {$scid}";
$pic_name = $scid;
}
[...]
答案 2 :(得分: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;
}