PHP:比较变量的问题


PHP: issue with comparing variables

我有两个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"; } ?> />

非常感谢你在这方面的帮助,蒂姆。

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

int strcmp ( string $str1 , string $str2 )

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

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

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

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

如果这两个字符串不匹配,则计算结果为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函数一样,它通常返回一个指针(找到子字符串的字符串的一部分,如strstr)或一个整数(字符串中的索引/偏移量)

<?php if($poc2 && $poc2 === $poc1) echo "checked" ?>