【问题标题】:PHP: Associative arrays with boolean valuesPHP:具有布尔值的关联数组
【发布时间】:2016-05-12 07:00:19
【问题描述】:

我有一个关联的 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 ? 'true' : 'false';
  • 问题是,你为什么想要那个输出?这仅用于调试吗?那么var_dump 是一个更好的选择。如果脚本中的其他地方需要该值,建议您不要将其更改为某种字符串表示形式。
  • 我需要提取不同变量中的键值对,然后进一步需要对这些结果加一些条件
  • 然后保持值原样,php知道如何处理truefalse而不是人类可读的,不需要改变它。

标签: php arrays


【解决方案1】:

但声明 echo $value 不会产生任何结果。

确实,在 PHP 中,布尔值 true 显示为 1,布尔值 false 显示为空字符串(即不显示任何内容)。做出此决定的原因之一可能是需要与 PHP converts values of other types to boolean 的方式保持一致。

出于调试目的,您可以使用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)你只需将convert the values 从数组中提取到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 使用名为variable variables 的功能。它首先解释$key,获取其值(字符串are_all_daily_budgets_spent),然后将$are_all_daily_budgets_spent 解释为一个新变量,创建它并将(int)$value 存储在其中。基本上,这与我们在之前的方法中所做的相同,只是自动化。

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

    extract($info);
    

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

警告

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

【讨论】:

    【解决方案2】:

    你可以在回显之前将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";   
    }
    

    【讨论】:

    • 您介意分享我如何将单个布尔值分配给变量。我需要诸如 "are_all_daily_budgets_spent" = False/0 之类的输出
    • 基本上,我希望输出的变量名与键名相同,但包含值。示例变量 are_all_daily_budgets_spent echo(are_all_daily_budgets_spent) 时应具有 False 值
    • are_all_daily_budgets_spent 应该有False 值(布尔类型)还是'False' 字符串类型值?
    【解决方案3】:

    在 PHP 中,尝试回显布尔值永远不会真正打印“true”或“false”。

    echo true;
    

    将打印 1,并且

    echo false;
    

    只是不会打印任何东西。试试这个:

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

    这使用ternary operator

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2021-08-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-27
        相关资源
        最近更新 更多