【问题标题】:PHP: issue with comparing variablesPHP:比较变量的问题
【发布时间】:2014-04-22 13:23:18
【问题描述】:

我有两个 PHP 变量,它们可以是空的(即value=""),也可以包含格式为 Last, First 的名称,并在姓氏和名字之间有一个空格(例如 Mouse、Mickey)。

我想在这里做一个简单的检查,如果一个变量不为空并且等于另一个,然后检查一个复选框,但这不起作用。 有人可以告诉我我做错了什么吗(在下面的示例中,应选中复选框)?

我的问题是复选框总是被选中,即使变量不匹配。

示例:

$poc1 = "Mouse, Mickey"; // hard-coded for testing
$poc2 = "Mouse, Mickey"; // hard-coded for testing

<input type="checkbox" id="check2" name="Copy_POC" <?php if(($poc2 != "") && (strcmp($poc2,$poc1))) { echo "checked"; } ?> />

非常感谢您提供的任何帮助,蒂姆。

【问题讨论】:

  • 你得到什么错误?
  • 刚刚在上面更新了这个。没有错误,它只是一直检查它。
  • php.net/in_array - 如果它太复杂:将它包装在它自己的函数中。然后,您可以修复该函数,并且所有调用该函数的代码都会自动正常工作:)
  • 谢谢。 strcmp 怎么样,因为我只想比较两个变量,而不是更多?
  • @user2571510:首先将其包装在一个函数中。然后测试所有你需要测试的东西。显示您的问题有多远,以及您对该代码/逻辑的确切问题点。到目前为止,一般答案是:按照您喜欢的方式比较字符串进行字符串比较 - PHP 有许多字符串和比较函数。

标签: php variables compare strcmp


【解决方案1】:

您需要查看strcmp 的函数签名及其返回值:

int strcmp ( string $str1 , string $str2 )

所以这个函数返回一个int,但是什么样的int呢?根据手册:

如果 str1 小于 str2,则返回 如果 str1 大于 str2 则为 0,如果它们相等则为 0。

换句话说:如果两个字符串相等,strcmp 返回0,其计算结果为false。因此,您应该写的是:

strcmp($str1, $str2) !== 0

如果 2 个字符串不匹配,这将评估为 true。当然,您只想在两个字符串 匹配时查看复选框:

if ($str1 != '' && strcmp($str1, $str2) === 0)
{
    //checked
}

应该这样做。当然,这仍然依赖于您的调用函数来检查这些字符串是否相等。不过,这并没有真正加起来,而且写起来可能会容易得多:

if ($str1 && $str1 === $str2)
//an empty string is falsy + type & value check on 2 strings using === operator

注意
您可能已经知道,PHP 是基于 C 构建的,因此有很多类似 C 的 str* 函数。每当您看到像 strcmpstrstr 这样的函数时,请检查它的返回值。像 C 中的 string.h 函数一样,它通常返回 either 一个指针(找到子字符串的字符串的一部分,如 strstr),或一个整数(字符串中的索引/偏移量)...

【讨论】:

  • 完美,是的,这正是我所缺少的!之前没用过这个功能。非常感谢 ! :) 会尽快接受。
  • 如果这是答案,您可能首先要寻找:$str1 === $str2$str1 == $str2。在 PHP 中,您也可以使用比较运算符来比较字符串。
  • @hakre:正要编辑我的答案以添加它:)
  • 我喜欢为此使用变量:$checked = in_array($str1, array("", $str2)); new line if ($checked) { ... :)
  • @hakre:谢谢你——这也很有帮助!
【解决方案2】:
<?php if($poc2 && $poc2 === $poc1) echo "checked" ?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多