首页 > 解决方案 > PHP中的布尔值总是评估为假?

问题描述

我正在使用一个返回关于数据库中用户的 JSON 的 API。

我在评估用户数据中的一些布尔值时遇到了一些麻烦。我已将所有信息提取到一个名为的数组中 - 然后我循环遍历该数组以检查它们是否在该字段中$search_results列出了任何内容。ok_to_list_donor

如果ok_to_list_donor为空,我需要检查我们是否有权限。如果我们确实获得了许可,那么我将ok_to_list_donor_field用他们的名字更新他们。

如果我们没有权限,我会用 AnonymousXXXX 更新它,其中 XXXX 是他们的内部 ID。

在某些情况下,他们没有给我们明确的许可,也没有拒绝我们。该值很可能返回为 NULL,因此我们使用 Anonymous?XXXX 来表示。

这是我正在使用的循环。

foreach ($search_results as $fields) {
// If they don't have an "ok to list donor" value, check if we have permission
    if (empty($fields["donor"]["ok_to_list_donor"])) {
        // If we don't have permission, update as anon
        if ((boolean)$fields["permisson"] === (boolean)false) {
          var_dump($fields["permission"]);
          echo "Update as AnonXXXX";
        }
        // If we do have permission, update the field with name
        elseif ((boolean)$fields["permission"] === (boolean)true) {
          var_dump($fields["permission"]);
          echo "Update as First Name Last Name";
        }
        // The only possible case left
        // If permission is null, it's unclear
        else {
          var_dump($fields["permission"]);
          echo "Update as Anon?XXXX";
        }
    }
}

我包含了 var_dump 来检查类型和值,$fields["permission"]并且我得到了我预期的所有值,但是,即使$fields["permission"]评估为(bool)true- 我看到了我的(bool)false案例的调试输出。

我进行了类型转换,因为我在比较时遇到了这个错误$fields["permission"] === false等等,并且想确保来自 API 的数据完全符合我的预期。

这是我看到的输出:

bool(true)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX
bool(false)
Update as AnonXXXX

我是否错误地进行布尔比较?PHP 新手,不确定我是否错过了一些大事

标签: phpboolean

解决方案


你的第一个比较是反对$fields["permisson"],不是$fields["permission"]。您的密钥中有一个简单的错字。解决这个问题,所有的演员都应该能够消失。


推荐阅读