【问题标题】:Boolean -> String (always the same)布尔值 -> 字符串(始终相同)
【发布时间】:2014-12-22 19:14:13
【问题描述】:

我有这个代码:

print ($myarray['response']['players'][0]['VACBanned'] ? 'BANNED' : 'NOT BANNED');

其中“VACBanned”是布尔值。但它是“真”还是“假”都没有关系;它总是给出“NOT BANNED”。

var_dump 结果:案例 1:'VACBanned' => bool(true) 案例 2:'VACBanned' => bool(false) 两种情况都显示“NOT BANNED”

图片: http://i.stack.imgur.com/Rk7uv.png http://i.stack.imgur.com/o0i9f.png

【问题讨论】:

  • var_dump($myarray['response']['players'][0]['VACBanned']) 的结果是什么?
  • trueWORD truetrue 如布尔值 true?有区别。单词 true 只是一个字符串,并且始终是布尔值“true”,就像单词 false 也是 true 一样。请记住,在 php 中,非空字符串被视为布尔值 true,只要它们不包含 false 值。
  • @MarcB 这是我的第一个想法,但如果它总是输出“NOT BANNED”,那就意味着它实际上是虚假的,对吧?
  • var_dump($myarray['response']['players'][0]['VACBanned']) 一次说“true”->“NOT BANNED” 其他输入说“false” " -> "不被禁止",太
  • var_dump 还应该告诉您值的 type(例如“string(4)”)。请编辑它以及问题中的值。

标签: php string boolean


【解决方案1】:

您需要打开turn error checking——或检查您的 apache 错误日志——并找出代码中的错误。

例如,您的var_dump($myarray); 显示一个没有任何“响应”键的数组。但是,您的打印声明是:

print ($myarray['response']['players'][0]['VACBanned'] ? 'BANNED' : 'NOT BANNED');

数组表达式永远找不到任何东西,因为没有“响应”键。所以它会 (a) 抛出一个错误“未定义的索引:响应”,并且 (b) 总是评估为 false,因此总是说“NOT BANNED”。

【讨论】:

    【解决方案2】:
    print (($myarray['response']['players'][0]['VACBanned'] != 0) ? 'BANNED' : 'NOT BANNED');
    

    【讨论】:

    • 投反对票的原因?
    • 嗯,请阅读布尔值的 php 手册:“-1 被认为是 TRUE,就像任何其他非零(无论是负数还是正数)数字一样!” php.net/manual/en/language.types.boolean.php 测试我编辑的代码!
    • 我说得对吗,即使是 'VACBanned' => bool(false) 也意味着“真”?那我怎么能把它“转换”成我网站上的文本呢? false 应该显示“NOT BANNED”和 true“BANNED”。实现这一点的最佳方法是什么?
    • 嗯,print (bool) "false" 和 print (bool) "true" 结果为 1 并且为 true(存在)。也许您可以将其转换为字符串,例如 "(string) $myarray['response']['players'][0]['VACBanned']" 并像 print ($myarray['response']['players '][0]['VACBanned'] ? 'BANNED' : 'NOT BANNED');
    猜你喜欢
    • 2016-04-26
    • 2012-03-06
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    • 2015-02-07
    • 2014-03-30
    相关资源
    最近更新 更多