PHP:具有布尔值的关联数组



我有一个关联php数组,其中的值是布尔值。我正在尝试迭代数组并将其分配给变量,然而,提取的值显示为空白

var_dump(info)输出为:

array(6) 
{ 
    ["are_all_daily_budgets_spent"]=> bool(false) 
    ["has_account_hit_spend_limit"]=> bool(false) 
    ["has_campaign_group_hit_spend_limit"]=> bool(false) 
    ["is_adgroup_partially_rejected"]=> bool(false) 
    ["is_account_closed"]=> bool(false) 
    ["is_daily_budget_spent"]=> bool(false) 
}

我需要提取布尔值并将其分配给单独的变量。

我试着做以下代码:

foreach ($info as $key => $value) {
        echo $key;
        echo $value;    
}

但语句echo$value不会产生任何结果。

此外,你能帮我制作以下输出吗are_all_daily_budgets_spent = 0 has_account_hit_spend_limit = 0

但是语句echo $value不会产生任何结果。

实际上,在PHP中,布尔值true显示为1,而布尔值false显示为空字符串(即不显示任何内容)。做出这一决定的原因之一可能是需要与PHP将其他类型的值转换为布尔值的方式保持一致。

出于调试目的,可以使用var_dump()而不是echo()。它以明确的方式向您显示变量的值及其类型:

foreach ($info as $key => $value) {
    echo($key);
    var_dump($value);
}

但您已经知道,您在问题中发布的数组的文本表示是使用var_dump($info);生成的。


更新

如果您需要从数组的键和值生成变量,那么您有很多选项。

  1. 您可以一个接一个地提取值(不一定全部提取),并在本地范围中创建变量:

    $are_all_daily_budgets_spent = $info['are_all_daily_budgets_spent'];
    $has_account_hit_spend_limit = $info['has_account_hit_spend_limit'];
    // ...
    

    如果要使用整数值(1表示TRUE0表示FALSE),只需将从数组中提取的值转换为integer:

    $are_all_daily_budgets_spent = (int)$info['are_all_daily_budgets_spent'];
    $has_account_hit_spend_limit = (int)$info['has_account_hit_spend_limit'];
    // ...
    
  2. 您可以执行与上面相同的操作,但在循环中(并提取数组中包含的所有值):

    foreach ($info as $key => $value) {
        $$key = (int)$value;
    }
    

    这里,$$key使用称为变量的特性。它首先解释$key,得到它的值(字符串are_all_daily_budgets_spent),然后将$are_all_daily_budgets_spent解释为一个新变量,创建它并将(int)$value存储在其中。基本上,这与我们在以前的方法中所做的相同,只是自动的。

  3. 您也可以使用PHP函数extract():

    extract($info);
    

    它基本上产生了与第2项上的代码相同的结果。

警告

当存储在$info中的数据来自外部来源(浏览器、API、用户输入等)时,不要使用方法#2和#3。它会带来很高的安全风险,因为它可能会用您无法控制的值覆盖您的变量。

您可以在echo之前将boolean类型更改为int,请检查以下代码:

foreach ($info as $key => $value) {
        echo $key;
        echo (int)$value;    
}

编辑(示例2):

foreach ($info as $key => $value) {
        echo '"' . $key . '" = ';
        echo ($value ? 'True/' : 'False/') . (int)$value . "n";   
}

在PHP中,尝试回显布尔值永远不会实际打印"true"或"false"。

echo true;

将打印1,并且

echo false;

只是不会打印任何内容。试试这个:

echo $boolean ? 'true' : 'false';

这使用三元运算符。

在php中,您不能回显具有布尔值的变量,在这种情况下,您可以检查该变量并将其转换为字符串。您可以在以下示例中看到这个过程:

foreach ($info as $key => $value) 
{
     $output = $value ? 'true' : 'false';
     echo $key.'='.$output.'<hr/>';
}

最新更新