2009-08-16 64 views
1

有没有更好的方法来写下面,其他然后使用开关或if/else语句?就像这是一个PHP的可变变量($$ var)可以使用的情况? 如果是这样,你会如何编写此代码?你会如何做这个PHP代码?

$type = 2; 

switch ($type) { 
case 1: 
    $type = 'gif'; 
    break; 
case 2: 
    $type = 'jpg'; 
    break; 
case 3: 
    $type = 'png'; 
    break; 
default: 
    $type = 'jpg'; 
    break; 
} 

回答

7
$types = array(1 => 'gif', 2 => 'jpg', 3 => 'png', 4 => 'jpg'); 

...

array_key_exists($type, $types) ? $types[$type] : 'jpg'; 
+0

与上面相同,但简短的版本! – JasonDavis 2009-08-16 16:46:33

+0

数组项之间用逗号分隔,而不是使用模块。 – Gumbo 2009-08-16 16:50:49

+0

谢谢,修复它。 – Zed 2009-08-16 16:53:17

12

我会使用一个数组:

$types = array(
    1 => 'gif', 
    2 => 'jpg', 
    3 => 'png' 
); 
if (isset($types[$type])) { 
    $type = $types[$type]; 
} else { 
    $type = 'jpg'; 
} 
+0

不错,所以这甚至可以减少到2行代码吧?我讨厌特别是当我需要重新使用它们时,有多大的开关staements – JasonDavis 2009-08-16 16:45:56

+1

@jasondavis:当然,你甚至可以把所有东西都放在一条线上。但我更喜欢可读性。 – Gumbo 2009-08-16 16:49:07

+0

@jasondavis:取决于你输入了多少次:) – Zed 2009-08-16 16:51:24

0

它看起来不错,但是如果你使用这个打开的GD一个图像你可以使用更简化的方式:

ImageCreateFromString(file_get_contents('path/to/your/image.ext')); 
+0

这不是它的用途 – JasonDavis 2009-08-16 16:47:19

1

由于2与默认值相同,因此可以让它级联。我更喜欢阵列的答案,但如果你需要一个开关,这将是一个更好的方法来做到这一点,所以你不要重复自己。

$type = 2; 

switch ($type) { 
case 1: 
    $type = 'gif'; 
    break; 
case 3: 
    $type = 'png'; 
    break; 
case 2: 
default: 
    $type = 'jpg'; 
    break; 
} 
+0

您甚至可以忽略'case 2:',因为它被'default:'覆盖。 – Gumbo 2009-08-16 17:01:18

+0

是的,粗糙。这就是我打字而不是思考的结果。答案已更新。 – nilamo 2009-08-16 23:07:05

+0

为了便于阅读,我会把它留在这里,因为它清楚地显示了默认设置,以及您应该使用什么样的jpg值。 – nickf 2009-08-16 23:13:19