用于检查数组中的值的简写

时间:2012-11-12 18:03:35

标签: php arrays compare

这样做有一个简短的方法吗?

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...

5 个答案:

答案 0 :(得分:1)

我不想回答我自己的问题,但我觉得做这种检查的最好和更清洁的方法就是写一个“帮手功能”,如:

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

然后:

if (iskeyval($a, 'key', 'value')) {
  ...
}
else {
  ...
}

答案 1 :(得分:1)

对于仍在这个问题上绊脚石的任何人...

您可以使用PHP's coalescing operator

if ( $a['key'] ?? false) {
  echo 'equal';
  // more code
}
else {
  echo 'not equal';
  // more code
}

看到这个问题:using PHP's null coalescing operator on an array

答案 2 :(得分:0)

简单地说(也就是说只删除括号可以缩短它)非常精细并且被接受为足够短:

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

但是,如果这样编写,测试数组键的存在在技术上更正确:

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

注意:仅针对'value'进行测试时无关紧要,但如果您正在与一个也可能null的变量进行比较,则difference in behaviour之间存在{{3}} {1}}和isset()

不幸的是,除非您可以根据现有谓词对其进行优化,否则这也会使表达式显着延长。

最后,黑客的方法是这样的(我强烈建议这样做):

array_key_exists()

<强>更新

要测试多个值,如果可能的键有限,可以使用变量:

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

答案 3 :(得分:0)

我添加了注释来解释代码。这是code
    

//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>";
}


?>

答案 4 :(得分:-1)

$list = array(
0 => 'one',
1 => 'two',
2 => 'one',
3 => 'three',
4 => 'one',
);

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


echo 'Equal';

取消错误报告。