2009-08-16 5 views
1

スイッチやif/elseステートメントを使って、以下のように書くより良い方法はありますか? PHPのvaraiable変数($$ var)が使えるような状況ですか? このコードを書くにはどうすればいいですか?それはしかし、あなたがGDで画像を開くには、これを使用している場合は、大丈夫に見えるどのようにこのPHPコードをやりますか?

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

答えて

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

...:

$type = 2; 

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

上記と同じですが、短いバージョン! – JasonDavis

+0

配列項目はセミコロンではなくコンマで区切られています。 – Gumbo

+0

ありがとう、それを修正しました。 – Zed

12

私は配列を使用したいですより簡単な方法を使用できます:

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

これは2行分のコードにも分かりますか?私はそれらを再利用する必要があるときに、スイッチの大きさが特に大きいことが嫌いです。 – JasonDavis

+1

@ジャスダビス:確かに、すべてを1行に入れることもできます。しかし、私は読みやすさを好む。 – Gumbo

+0

@ジャスダビス:あなたが何回入力したかによって決まります:) – Zed

0

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

これは、それが使われていないものです – JasonDavis

1

2はデフォルトと同じなので、カスケードすることができます。私は配列の答えが気に入っていますが、スイッチが必要な場合は、これを行うより良い方法ですので、繰り返しはしません。

$type = 2; 

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

'default:'で覆われている 'case 2:'を残すことさえできます。 – Gumbo

+0

はい、粗いです。それは私が思考の代わりにタイプするために得るものです。回答が更新されました。 – nilamo

+0

私は可読性のためにそれを残しておきました。なぜなら、デフォルトが何であるかを明確に示していて、jpgにどのような値を使うべきかということです。 – nickf

関連する問題