PHP中“==”和“strcmp”之间的区别

时间:2016-07-15 09:30:31

标签: php strcmp

我被要求创建模拟array_keys function,但检查等式"=="会返回false。 但是"strcmp ($a, $b) == 0"返回true

class Utility
{
    public function convertArrayKeys(array $array)
    {
        $i = 0;
        $elements = [];
        foreach ($array as $element=>$value) {
            $elements[] = '  ' . $i++ . " => '" . $element . "'";
        }

        return 'array ( ' . implode(', ', $elements) . ', )';
    }

    public function testStrings(array $array)
    {
        $arrayOur = $this->convertArrayKeys($array);
        $arrayPhp = var_export(array_keys($array),true);
        if ($arrayOur == $arrayPhp){
            echo 'They are identical :)';
        } else {
            echo 'They are not identical :(';
            echo '<br>';
            print_r(str_split($arrayOur));
            echo '<br>';
            print_r(str_split($arrayPhp));
        }
    }
}

查看:

$repository = array('box'=>'blue', 'cube'=>'red', 'ball'=>'green');
$utility = new Utility();

echo "OUr array_keys: ";
echo $utility->convertArrayKeys($repository);
echo "<br />";
echo "PHP array_keys: ";
print_r (var_export(array_keys($repository)));

echo "<hr >";
echo "<br />";

echo $utility->testStrings($repository);

我很高兴知道因为

3 个答案:

答案 0 :(得分:4)

编辑:两个不在 THIS 实例中工作的原因是你的功能不会产生相同的输出:你的产生:

array ( 0 => 'box', 1 => 'cube', 2 => 'ball', )

php函数产生的地方:

array ( 0 => 'box', 1 => 'cube', 2 => 'ball', )

如果您在Web浏览器中查看,我认为Web浏览器渲染器会执行空白欺骗。但是,请尝试在其周围添加<pre>标记(或在命令行中运行以进行检查)。

基本上==做了更多,然后比较这两个值 - 文档建议&#34;在类型杂耍&#34;之后。通过使用==比较字符串,您可以获得一些奇怪的东西。一个很好的例子是:'1e3' == '1000'。有时使用==很有用,但可能不与字符串结合使用。

Strcmp虽然没有返回真/假答案,但是-1,0,1答案表示哪个字符串按字母顺序排在另一个字母之前。

您还应该查看===哪些内容也有用,但我个人会坚持使用字符串strcmp。

答案 1 :(得分:0)

您永远不会在==中使用PHP。它不会做你期望的。即使您将字符串与字符串进行比较,PHP也会隐式地将它们转换为浮点数,并在它们看起来是数字时进行数值比较。

尝试这些你会知道原因

$something = 0;
echo ('password' == $something) ? 'true' : 'false';// true

$something = 0;
echo ('password' === $something) ? 'true' : 'false'; // false

echo strcmp('password123',$something); // 1

答案 2 :(得分:0)

因为它们不是数组,而是字符串。数组不是这样创建的。你做错了。如果是阵列那么

if ($arrayOur == $arrayPhp)

会评估为true。但它们只是字符串而且

"strcmp ($a, $b) == 0"

不返回true,因为第一个字符串中有空格

 return 'array ( ' . implode(', ', $elements) . ', )';

你这样做完全错了。你需要纠正你的方法。