我有一个关联的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;
}
答案 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);
生成的。
<强>更新强>
如果你需要从数组的键和值生成变量,你有很多选择。
您可以逐个提取值(不一定是所有值)并在本地范围内创建变量:
$are_all_daily_budgets_spent = $info['are_all_daily_budgets_spent'];
$has_account_hit_spend_limit = $info['has_account_hit_spend_limit'];
// ...
如果您希望使用整数值(1
为TRUE
,0
为FALSE
),您只需将convert the values从数组中提取到{{1} }}:
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'];
// ...
此处,foreach ($info as $key => $value) {
$$key = (int)$value;
}
使用名为variable variables的功能。它首先解释$$key
,获取其值(字符串$key
),然后将are_all_daily_budgets_spent
解释为新变量,创建它并将$are_all_daily_budgets_spent
存储在其中。基本上,它与我们之前的方法一样,只是自动化。
您还可以使用PHP函数extract()
:
(int)$value
它基本上产生与第2项上的代码相同的结果。
当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/>';
}