我想在 if 语句中使用一个变量,但我不知道它是否已设置。
我目前这样做
if (isset ($array['var']) && ($array['var']==5) ) ....
必须有一种更优雅的方式来做到这一点。最佳做法是什么?
这确实是 PHP 可能想要添加一些语法糖的领域之一。目前,如果你愿意的话,写这个更简洁或更优雅的唯一方法是使用自定义函数:
function array_val($array, $key) {
return array_key_exists($key, $array) ? $array[$key]: false;
}
if (array_val($array, 'var') == 5) {
// do your stuff
}
您甚至可以对此进行扩展以使第二个参数也接受路径:
function array_val($array, $path) {
if (is_array($path)) {
$current = $array;
foreach ($path as $p) {
if (!is_array($current)) return false;
if (array_key_exists($p, $current)) $current = $current[$p];
else return false;
}
return $current;
}
return array_val($array, array($path));
}
$myArr = array(
'key1' => array(
'key2' => array(
'key3' => 'myValue'
)
)
);
echo array_val($myArr, array('key1', 'key2', 'key3')); // will echo 'myValue'
您可以使用例如:
if (isset ($array['var'])) {
if ($array['var']==5) {
// Do something here
}
}
如果未设置键,我创建一个返回默认值的函数:
//Have to take the array by reference, or you will get a notice about undefined variables.
//Just be sure you don't modify $array in this function.
function arrayValueWithDefault(&$array, $key, $default) {
if (!is_array($array) || !array_key_exists($key, $array))
return $default;
return $array[$key];
}
$_GET
它非常适合从and读取之类的东西$_POST
,但是您可以在任何数组上使用它:
$id = arrayValueWithDefault($_GET, 'id', 0);
$name = arrayValueWithDefault($_POST, 'name', "");
$array = array(
'count' => 3,
'items' => array(0, 1, 2)
);
//Yes, I realize that you could just use sizeof() on $items here.
$count = arrayValueWithDefault($array, 'count', 0);
$items = arrayValueWithDefault($array, 'items', array());
for ($i = 0; $i < $count; $i++) {
$item = $items[$i];
echo $item;
}
因此,在您的具体示例中,您可以执行以下操作:
$var = arrayValueWithDefault($array, 'val', 0);
if ($var == 5)
//do something