5

有没有捷径可以做到这一点?

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

我需要在一个可以存在或不存在的数组上测试很多值。我觉得这个方法太冗长了。

我可以删除isset()通知并将通知静音...但是我觉得很脏。

编辑:

回答 Jack 的问题:“你能举个例子,你将如何测试数组中的大量值吗?”

例子:

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

3

对于任何仍然绊倒这个问题的人......

您可以使用PHP 的合并运算符

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

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

于 2020-09-04T12:34:34.107 回答
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 回答