【问题标题】:PHP cannot compare stringsPHP 无法比较字符串
【发布时间】:2017-07-14 10:21:25
【问题描述】:

这是一个如此基本的事情,我不敢相信我无法弄清楚。我在模板文件中有一个 php 变量,称之为$author。它由我正在使用的内容管理系统传入。我很确定这是一个字符串。它的值是 'John'

我之所以认为它是一个字符串是因为当我尝试时

<?php print gettype($author); ?>

它打印“字符串”
当我写作时

<?php print $author; ?>

'John' 被打印出来
但是,当我写

<?php $author == 'John' ? print 'yes' : print 'no'; ?>

它打印出'no'。等等..什么?
当我使用

<?php print strcmp($author, 'John'); ?>

函数返回-14!
我想我的问题是,这里发生了什么?我如何测试$author is equal to 'John'? 如果重要的话,内容管理系统是drupal,但我认为这更像是一个一般的php问题。

【问题讨论】:

  • 现在做var_dump($author)
  • 是的,var_dump 会将错误转储出来
  • 也许 $author 包含一些控制字符/空格?试试trim($author)
  • 感谢您的 cmets。当我做 var_dump 时,我得到了非常意想不到的结果。但如果我注意到它检查元素,答案很明显,我通常会注意到它。我猜只是迟到了。 “trim”是我尝试的第一个,但结果它被包裹在 中,所以 'strip_tags' 成功了.. 我现在觉得有点傻哈哈,但我想我会留下这个问题,以防它对某人有帮助.

标签: php templates drupal-7


【解决方案1】:

强制为字符串。

<?php
$author = (string)$author;
$author == 'John' ? print 'yes' : print 'no';
?>

【讨论】:

  • 我试了一下,但结果发现它只是有一些额外的字符,我在检查元素中没有注意到(猜想有点晚了),.. var_dump 消除了差异。我会留下这个问题,以防它对某人有所帮助。
  • @Benjamin Thvedt 一直在发生,呵呵 :)。很好,现在可以了。