PHP:比较变量的问题

时间:2014-04-22 13:23:18

标签: php variables compare strcmp

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

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

2 个答案:

答案 0 :(得分:1)

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

int strcmp ( string $str1 , string $str2 )

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

  

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

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

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

如果2个字符串不匹配,则评估为true。当然,您只希望在两个字符串 don&#t; 匹配时检查ckeckbox:

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)或整数(字符串中的索引/偏移量) )...

答案 1 :(得分:0)

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