2009-08-16 103 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