Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何避免检查是否设置了变量?(菲律宾)_Php_Variables - Fatal编程技术网

Php 如何避免检查是否设置了变量?(菲律宾)

Php 如何避免检查是否设置了变量?(菲律宾),php,variables,Php,Variables,我想在if语句中使用一个变量,但我不知道它是否已设置 我现在这样做 if (isset ($array['var']) && ($array['var']==5) ) .... 必须有一种更优雅的方式来做到这一点。最佳做法是什么?您可以使用例如: if (isset ($array['var'])) { if ($array['var']==5) { // Do something here } } 例如,您可以使用: if (isset ($arra

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

我现在这样做

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

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

您可以使用例如:

if (isset ($array['var'])) {
   if ($array['var']==5) {
      // Do something here
   }
}

例如,您可以使用:

if (isset ($array['var'])) {
   if ($array['var']==5) {
      // Do something here
   }
}

这确实是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'

这确实是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'

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

//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];
}
它非常适合从
$\u GET
$\u 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;
}

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

//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];
}
它非常适合从
$\u GET
$\u 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;
}


这不是完全一样吗?除非在
if(isset
bit)中有更多的检查,否则方法是一样的,但最好是读取。我认为..但是您最终会得到一个不必要的
if
语句。如果您想让它更好地读取,为什么不把
$array['var']==5
在同一
if
语句中的换行符上。@q0re-当然效率更低,因为有一个额外的
if
语句。正如David Gard所说,效率稍低。有两个分支而不是一个。这不是完全一样吗?除非
if语句中有更多的检查(isset
bit方法是一样的,但最好是读取。我认为..但您最终会得到一个不必要的
if
语句。如果您希望它更好地读取,为什么不将
$array['var']==5
在同一
if
语句中的换行符上。@q0re-当然效率更低,因为有一个额外的
if
语句。正如David Gard所说,效率稍低。有两个分支而不是一个。我建议使用
array\u key\u exists('var',$array)
而不是
isset()
在处理数组时。感谢您的回答。到目前为止,这三个答案不是我想要的。解决方案的代码应该比我的少。如果PHP没有一些语法方法使其更优雅,这就是我想要的答案。您是否有定义自己函数的问题?通常,您会将这些普通include文件中的函数包含在每个PHP脚本的顶部。然后,代码量就会减少。我建议使用
array\u key\u exists('var',$array)
而不是
isset()
在处理数组时。感谢您的回答。到目前为止,这三个答案不是我想要的。解决方案的代码应该比我的少。如果PHP没有一些语法方法使其更优雅,这就是我想要的答案。您是否有定义自己函数的问题?通常,您会将这些在每个PHP脚本顶部包含的通用包含文件中的函数。然后,代码量确实会减少。这绝对不是一个坏方法!感谢NDM。我将答案标记为正确,因为我告诉我在PHP中没有更好的方法来处理它。这绝对不是一个坏方法!感谢NDM。我将答案标记为correct告诉我在PHP中没有更好的方法来处理它。