这样做有一个简短的方法吗?
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...
答案 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
}
答案 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';
取消错误报告。