0

我想在 if 语句中使用一个变量,但我不知道它是否已设置。

我目前这样做

if (isset ($array['var']) && ($array['var']==5) ) ....

必须有一种更优雅的方式来做到这一点。最佳做法是什么?

4

3 回答 3

3

这确实是 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'
于 2013-09-12T11:35:27.857 回答
0

可以使用例如:

if (isset ($array['var'])) {
   if ($array['var']==5) {
      // Do something here
   }
}
于 2013-09-12T11:19:10.530 回答
0

如果未设置键,我创建一个返回默认值的函数:

//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
于 2013-09-12T12:30:38.463 回答