检查变量是否为true,false,如果没有则设置为null

时间:2016-10-12 06:18:34

标签: php json

我正在努力完成一项相当简单的任务。

我正在使用REST后端,它有时会收到一个json-object作为参数,如“api?params = {”foo“:bar}”。并且“foo”可以是true / false或null(undefined)。

当我回到myParam(foo)时为真,它回应“真实”。 当foo为false时,它什么都不返回(我希望它回显“false”), 但是当没有定义foo时,当它不在API调用中时,我希望它返回“null”。

我很长一段时间在网上找到了一个片段,我认为它正在发挥作用。

$foo = (null !== $jsonObj->foo ? $jsonObj->foo: "");

但是当foo为false或null时它不起作用。

$foo = var_export($jsonObj->foo, true);

然后该行将变量作为字符串返回,并将其返回为“correct”,当为true时返回“true”,在false时返回“false”,在null时返回“NULL”。这个我可以合作。

switch ($foo) {
    case "true":
         $result = true;
         break;
      ...

但是,必须有更好的方法吗?正确?

---更新---

现在对我有用的解决方案是这样的: (因为我将值存储在数组中,存储false将等于“”)

$ foo = is_null($ jsonObj-> foo)? null:$ jsonObj-> foo;

如果null / undefined,则给我foo = null,否则为true / false ...

然后将它存储在数组中,我使用了这个:

$ array [“foo”] =(!is_null($ foo)?intval($ foo):null);

这将它存储为0/1或“”如果它为null,那么我有3个状态我可以使用。

但阅读所有评论让我尝试了最好的解决方案。

2 个答案:

答案 0 :(得分:1)

您可以使用php isset()功能。

即。 :

if (!isset($foo)) {
    echo "foo is not set : ";
    var_dump($foo);
    echo "<br />";
}
// returns "foo is not set : NULL"


$foo = NULL;

if (!isset($foo)) {
    echo "foo = NULL : ";
    var_dump($foo);
    echo "<br />";
}
// returns "foo = NULL : NULL"


$foo = false;

if (isset($foo)) {
    echo "foo = false : ";
    var_dump($foo);
    echo "<br />";
}
// returns "foo = false : bool(false)"


$foo = true;

if (isset($foo)) {
    echo "foo = true : ";
    var_dump($foo);
}
// returns "foo = true : bool(true)"

希望它有所帮助。

答案 1 :(得分:0)

我猜你混合了一个包含“true”的字符串和一个真正的布尔值“true”。

始终使用var_dump来确保变量的类型正确。 var_dump($jsonObj->foo)

这将显示确切的类型。

因此,如果它是一个字符串,你必须检查类似的东西(你已经在switch中的内容)

if($jsonObj->foo == "true")