5

これを行う短い方法はありますか?

if ((isset($a['key']) && ($a['key'] == 'value')) {
  echo 'equal';
  // more code
}
else {
  echo 'not equal';
  // more code
}

存在できる、または存在できない配列で多くの値をテストする必要があります。この方法は冗長すぎると思います。

を削除しisset()て通知をミュートすることもできました... しかし、そうすると汚く感じます。

編集:

ジャックの質問に答える: 「配列内の多くの値をテストする方法の例を挙げていただけますか?」

例:

if (isset($_GET['action']) && $_GET['action'] == 'view') {
  //code
}
if (isset($_GET['filter']) && $_GET['filter'] == 'name') {
  //code
}
if (isset($_GET['sort']) && $_GET['sort'] == 'up') {
  //code
}
if (isset($_GET['tag']) && $_GET['tag'] == 'sometag') {
  //code
}
etc...
4

5 に答える 5

2

私は自分の質問に答えるのは好きではありませんが、この種のチェックを行うための最良かつクリーンな方法は、次のような「ヘルパー関数」を書くことだと思います。

function iskeyval(&$a, $k, $v) {
  return isset($a['key']) && ($a['key'] == 'value');
}

その後:

if (iskeyval($a, 'key', 'value')) {
  ...
}
else {
  ...
}
于 2012-11-12T18:35:36.367 に答える
1

単純にこれ (つまり、括弧を削除するだけで短くすることができます) は完全に問題なく、十分に短いものとして受け入れられます。

if (isset($a['key']) && $a['key'] == 'value') {

ただし、配列キーの存在のテストは、次のように記述した方が技術的にはより正確です。

if (isset($a) && is_array($a) && array_key_exists('key', $a) && $a['key'] == 'value') {

注:それに対してテストする'value'場合は問題ではありませんが、変数と比較する場合は、と の間に動作null違いがisset()ありますarray_key_exists()

残念ながら、既存の述語に基づいて最適化できない限り、式がかなり長くなります。

最後に、ハッカーのアプローチは次のとおりです (これを行わないことを強くお勧めします)。

if (@$a['key'] == 'value') {

アップデート

複数の値をテストし、可能なキーが限られている場合は、変数変数を使用できます。

foreach (array('action', 'filter', 'sort', 'tag') as $var) {
    $$var = isset($x[$var]) ? $x[$var] : '';
}

if ($action == 'view') {
}
if ($filter == 'name') {
}
// etc.
于 2012-11-12T18:16:23.063 に答える
0

コードを説明するコメントを追加しました。コードは次のとおりです。

//this array maps the function with the get parameters
$functions = array (
"action" => "do_actions" ,
"filter" => "do_filters"
);


foreach ($_GET as $key=>$value) {
    //check if this field is corresponding functions or not  
    if ( array_key_exists($key , $functions) ) {
        call_user_func($functions[$key] , $key,$value);
    }
}


function do_actions ($key , $value) {
    //place your code here to play with this value
    echo 'do_actions is called with ' . $key . 'and' . $value . "</br>";
}

function do_filters ($key , $value) {
    //place your code here to play with this value
    echo 'do_filters is called with ' . $key . ' and ' . $value .  "</br>";
}


?>
于 2012-11-12T19:14:06.880 に答える
-2
$list = array(
0 => 'one',
1 => 'two',
2 => 'one',
3 => 'three',
4 => 'one',
);

if( @$list['xxx'] !== 'three')
    echo 'Not ';


echo 'Equal';

エラー報告を抑制します。

于 2012-11-12T18:22:27.217 に答える