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

时间:2016-05-12 07:00:20

标签: php arrays

我有一个关联的php数组,其中的值是boolean。我试图迭代数组并将其分配给变量,但是,提取的值是空白的

var_dump(info)输出为:

var arr = [{title: 'Orange'}, {title: 'Apple'}, {title: 'Kiwi'}, {title: 'Banana'}];

function appleExists(){
    return arr.some(elem => elem.title == 'Apple'); 
}

alert(appleExists());
//if (!appleExists()) arr.push({title: 'Apple'});

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

我尝试了以下代码:

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) 
}

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

另外,您能帮我制作以下输出: foreach ($info as $key => $value) { echo $key; echo $value; }

4 个答案:

答案 0 :(得分:4)

  

但声明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'];
    // ...
    

    如果您希望使用整数值(1TRUE0FALSE),您只需将convert the values从数组中提取到{{1} }}:

    integer
  2. 您可以执行与上面相同但循环(并提取数组中包含的所有值):

    $are_all_daily_budgets_spent = (int)$info['are_all_daily_budgets_spent'];
    $has_account_hit_spend_limit = (int)$info['has_account_hit_spend_limit'];
    // ...
    

    此处,foreach ($info as $key => $value) { $$key = (int)$value; } 使用名为variable variables的功能。它首先解释$$key,获取其值(字符串$key),然后将are_all_daily_budgets_spent解释为新变量,创建它并将$are_all_daily_budgets_spent存储在其中。基本上,它与我们之前的方法一样,只是自动化。

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

    (int)$value

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

  4. 警告

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

答案 1 :(得分:1)

在PHP中,尝试回显布尔值将永远不会打印&#34; true&#34;或&#34; false&#34;。

echo true;

将打印1,

echo false;

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

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

这使用ternary operator

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

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