检查数组中的值的简写

Pet*_*ter 5 php arrays compare

有没有一种简短的方法来做到这一点?

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

我需要在可能存在或不存在的数组上测试大量值。感觉这个方法太啰嗦了。

我可以删除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...
Run Code Online (Sandbox Code Playgroud)

Fab*_*ert 9

对于任何仍在偶然发现这个问题的人......

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

if (($a['key'] ?? '') === 'value') {
  echo 'equal';
  // more code
}
else {
  echo 'not equal';
  // more code
}
Run Code Online (Sandbox Code Playgroud)

请参阅这个问题:Using PHP's null Coalescing Operator on an array


Pet*_*ter 1

我不喜欢回答我自己的问题,但我觉得进行这种检查的最好、最干净的方法是编写一个“辅助函数”,例如:

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

进而:

if (iskeyval($a, 'key', 'value')) {
  ...
}
else {
  ...
}
Run Code Online (Sandbox Code Playgroud)

  • 你总是可以围绕某些东西编写一个函数,但问题是表达式是否可以变得更短,但它不能:)顺便说一句,你可以使用 `(array $a, $k, $v)` 作为参数列表相反,让 PHP 为您检查参数类型。 (2认同)