8

私は現在ダウンロード マネージャーのようなものを書いていますが、それが可能かどうか自問自答していました。

if($ext == ('zip' || 'png')) { echo "Is it possible ?" }

毎回trueを返すので、不可能だと思います。しかし、どうすればこれを簡単に行うことができるか考えていますか? つまり、「if」や「switch」がたくさんあるわけではありません...

とにかくありがとう !:)

4

9 に答える 9

22

あなたが使用できるin_array($ext,array('png','zip','another','more'))

ここを参照してください: http://php.net/manual/en/function.in-array.php

于 2010-01-24T15:52:23.677 に答える
12

if($ext == ('zip' || 'png'))は次の順序で比較を行っています-> ('zip' || 'png')、少なくとも1つはnullではないため、TRUEを返します。今、($ext == TRUE)これを手足に出して、phpがこれを同じように評価していると推測し($ext)ます。これも当てはまります。

if ( $ext == 'zip' || $ext == 'png' )あなたが探しているものをチェックします。

于 2010-01-24T15:56:05.637 に答える
4

switch-caseステートメントを使用できます。

switch($ext)
{ 
  case 'png':
  case 'zip':
       // Will run for both 'png' and 'zip'
       echo "It is possible";
       break;
  default:
       echo "unknown extension!";
       break;
 }
于 2010-01-24T15:51:42.093 に答える
3

正規表現を使用できます。

if(preg_match("/^(zip|png)$/", $ext) { echo “It is possible!” }

関連する質問:正規表現を使用した PHP でのファイル拡張子の確認

于 2010-01-24T15:51:01.037 に答える
3
if(($ext == 'zip') || ($ext == 'png')) { echo "It's possible." }
于 2010-01-24T15:51:55.933 に答える
2

ちょっとしたアドバイス:PHPは、ifステートメントの条件付き部分にある場合、実際にはゼロ以外の値が「真」であると見なされるという意味で、Cブール型の処理に似ています。たとえば、比較構文と型で「=」記号を見逃しif($var = "val")if($var == "val")場合、そのステートメントでは常に真の値が得られます。これは、「=」演算子が右側の部分「val」からのset-operation値の結果として返されるためです。つまり、順番に「true」に変換されます。したがって、この状況で比較条件の原因の左側にリテラルを書き込むことをif("val" == $var)お勧めします。この状況では、「==」比較で「=」記号を1つ失うとエラーが発生します。

したがって、ifステートメントは次のようになります。 if('zip' == $ext || 'png' == $ext) { echo "Is it possible ?" }

また、「zip」および「png」リテラルをFILE_TYPE_ZIP、FILE_TYPE_PNGという名前の定数に入れるか、ソースページの上部にあるグローバルPHP配列のような列挙型エンティティを定義するか、別のエンティティを作成する方がよいでしょう。プログラムでサポートされているファイルタイプを強調する外部ファイルのクラスSupportedFileTypes(この場合、詳細についてはPHPと列挙を確認してください)。

開発の開始時に、パフォーマンスの問題を気にする必要はありません。将来、読みやすく、進化/最適化するのが簡単なコードを作成することが重要です。

于 2010-01-25T17:17:15.530 に答える
2

それは間違いなく可能ですが、そこで行っているのは間違ったコードです。これがあなたが書いたものです:

if($ext == ('zip' || 'png')) { echo "Is it possible ?" }

そして、これがphpで何に変換されるかです:

if( (if $ext evaluates to true then return true) == ( if 'zip' evaluates to true then return true || if 'png' evaluates to true then return true ) )

したがって、「zip」はphpで定義されている「empty」または「false」の値ではなく、「png」でもないため、基本的に次のifステートメントを実行しています。

if($ext == true)

空でない場合は、空になります。

あなたが欲しいのは-前述のように:

if($ext == 'zip' || $ext == 'png')
于 2010-01-24T15:56:42.063 に答える
1
if (in_array($ext, array('png', 'zip'))) {
    echo "Is it possible ?"
}

複数回必要な場合は、配列をどこかに保存できます。

于 2010-01-24T15:53:15.600 に答える