1

この例のようなことをするためのショートカットがあるかどうか疑問に思っていました:

if ( isset($_POST['name']) && $_POST['name'] == 'George' || $_POST['name'] == 'Mike' );

[編集]:質問が最初はあいまいに見えた場合は申し訳ありませんが、私が尋ねるつもりだったのは、「同じ変数に対してこれらすべてのチェックを行っているので、3回書き込まないためのより良い方法はありますか?」です。

まれで..より簡単な方法はありますか?

  1. 入れ子よりもきれい。
  2. 上記の構文よりも短いですか?
  3. 私は主にこれらの3つの言語を使用しているので、(Ruby、C#、またはPHP)のいずれかで。

これは単なる一般的な知識の質問です。ネストされたifや上記のような長い論理演算を書くのに飽きてきました。

4

7 に答える 7

2

投稿データを取得するための関数を定義できます。

function getPOST($name) {
  return isset($_POST[$name]) ? $_POST[$name] : null;
}

この関数は、存在しない配列フィールドへのアクセスに関する通知を表示することはなく、結果は例の値のリストと簡単に比較できます。

if (in_array(getPOST('name'), array('George', 'Mike')) {

}
于 2012-04-20T18:06:45.693 に答える
1

あなたの質問を正しく理解したかどうかはわかりませんが、特定の変数を一連の値と比較したいようです。次のことができます。

  1. すべての値を配列に入れます。
  2. 変数が設定されているかどうかを確認してください。
  3. in_array関数を使用して、変数の値が値の配列に存在するかどうかを確認します。
于 2012-04-20T18:17:02.057 に答える
1

Rubyでは

if $_POST['name'] && ['George', 'Mike'].include?($_POST['name'])
于 2012-04-20T19:36:56.123 に答える
0

isset値がそうでないことNULLstrlen確認してから、実際にそこに何かがあることを確認するために使用します。

if(isset($_POST['name']) && strlen($_POST['name']) > 0)
{
    //Do stuff
}
于 2012-04-20T18:10:31.170 に答える
0
function post_data($key){
    if(isset($_POST[$key]) && $_POST[$key]!='') return $_POST[$key];
    return null;
}

$possible_names  = array('George', 'Mike');

if(in_array(post_data('name'), $possible_names)) {}
于 2012-04-20T18:20:13.213 に答える
0

さて、質問は非常に一般的です。同じ変数名を何度も使用できないのはなぜですか?さて、あなたのコードはどのように見えますか、そして私はあなたに話します:)一般的に、それは実際に答える可能性のある質問ではありません。あなたの例の場合、あなたはこのようなことをすることができます(C#で):

string x = "foo";
if ( new string[]{"bar","baz","foo","foobar"}.Contains(x)) ....

または:

public static class Extensions {
        public static bool In<T>(this T needle, params T[] haystack){
            return haystack.Contains(needle);
        }
    }


string x = "foo";
if (x.In("bar", "baz", "foo", "foobar")) {
于 2012-04-20T18:22:54.127 に答える
0

Symfony 1.4フレームワークはsfParameterHolder、要素が配列に存在するかどうかを判断しようとする問題に対処するために利用します。

プロジェクト内の機能をコピー/複製することで、少しクリーンアップできsfParameterHolderます。

switchその構文を使用して条件文のすべての値をクリーンアップする場合は、ステートメントを使用することもできます。

最終結果は次のようになります。

$post = new sfParameterHolder($_POST);

switch( $post->get('name') )
{
  case 'george':
  case 'mike':
    // Do something.
    break;
}
于 2012-04-20T18:25:48.890 に答える