如果键不存在,则设置关联数组的默认值的功能

时间:2011-02-23 09:42:44

标签: php

如果未设置变量,PHP中是否有设置默认值的函数? 一些内置函数来替换类似的东西:

$myFruit = isset($_REQUEST['myfruit']) ? $_REQUEST['myfruit'] : "apple" ;

5 个答案:

答案 0 :(得分:8)

PHP类有一个运算符(我认为5.3),它会将你的例子压缩为:

$myFruit = $_REQUEST['myfruit'] ?: "apple";

然而,我说“有点”,因为它只测试第一个操作数是否为false,如果没有设置则不会抑制通知。因此,如果(如您的示例中)可能未设置,则原始代码最佳。

类似于dictionary.get的功能很简单:

function dget($dict, $key, $default) {
    return isset($dict[$key]) ? $dict[$key] : $default;
}

为清楚起见,我仍然使用您的原始代码。

编辑:http://wiki.php.net/rfc/ifsetor的ifsetor()的userland实现#2比上面的函数更整洁,并且也适用于非数组,但是同样需要注意,默认表达式总是会被评估如果没有使用:

function ifsetor(&$variable, $default = null) {
    if (isset($variable)) {
        $tmp = $variable;
    } else {
        $tmp = $default;
    }
    return $tmp;
}

答案 1 :(得分:1)

据我所知,在PHP中没有这样的东西。

你可以像

一样自己实现这样的东西
$myVar = "Using a variable as a default value!";

function myFunction($myArgument=null) {
    if($myArgument===null)
        $myArgument = $GLOBALS["myVar"];
    echo $myArgument;
}

// Outputs "Hello World!":
myFunction("Hello World!");
// Outputs "Using a variable as a default value!":
myFunction();
// Outputs the same again:
myFunction(null);
// Outputs "Changing the variable affects the function!":
$myVar = "Changing the variable affects the function!";
myFunction();

答案 2 :(得分:1)

您还可以创建一个实现ArrayAccess的类,您在构造期间传递2个数组($_REQUEST和一个默认数组)并使其透明地选择默认值。

顺便说一句,依靠$_REQUEST并不是一个明智的想法。有关详细信息,请参阅$_REQUEST上的手册。

答案 3 :(得分:0)

除了测试之外,如果某个键不存在然后返回默认值,您还可以在访问之前使用此值填充数组。

$expectedKeys = array('myfruit');
$requestData = array_merge (
  array_combine(
    $expectedKeys,
    array_fill(0, count($expectedKeys), null)),
  $_REQUEST);

$postData现在是一个包含您期望的所有键的数组(由$expectedKeys指定),但$_REQUEST中缺少的任何条目都是null

$myFruit = $requestData['myfruit'];
if (is_null($myFruit)) {
  // Value not exists
}

但我也建议您继续使用三元运算符?:

答案 4 :(得分:-1)

在CakePHP框架中有一个名为ife()的函数,你可以在http://api13.cakephp.org/view_source/basics.php/找到它,它是最后一个函数!

你可以像这样使用它:

echo ife($variable, $variable, 'default');