【问题标题】:PHP strcmp result int meaningPHP strcmp 结果 int 含义
【发布时间】:2019-04-24 09:23:44
【问题描述】:

在php中,有一个内置函数strcmp来比较两个字符串是否相同。

返回值是整数,如果第一个参数大于第二个参数,我得到> 0,如果不是< 0,如果相同则为0

所以我没有得到的部分是将字符串作为数字进行比较。 PHP是否将字符串转换为数字,如果是,PHP如何转换?

$a = 'acorn';
$b = 'zebra';
var_dump( strcmp($a, $b) ); // -25 <- what's this number? seems like alphabetical position...nnn

我得到什么号码真的不重要吗,我应该接受它的号码吗?

【问题讨论】:

  • 来自文档,“如果 str1 小于 str2,则返回 ;> 如果 str1 大于 str2,则返回 0,如果它们相等则返回 0。"
  • 是的!这是AZ的相对位置
  • 如果您想知道原因,请查看文档页面上的this comment

标签: php string strcmp


【解决方案1】:

看PHP:strcmp doc:

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

所以是的,您可以按原样使用它来比较您的字符串。

但是如果你想了解函数返回的数字,它取决于组成字符串的字符。

ASCII 格式:

A=65

因此,如果字符串不同,则其中一个将大于另一个。

所以你也可以用一个简短的脚本轻松测试它:

<?php

$a='A';
$b='B';
$c='C';

//Return -1 because $a is smaller than $b by one (65 < 66 )
echo strcmp($a,$b);

//Return -2 because $a is smaller than $c by two (65 < 67 )
echo strcmp($a,$c);


//Return -1 because $b is smaller than $c by one (66 < 67 )
echo strcmp($b,$c);

//Return 1 because $c is greater than $b by one (67 > 66 )
echo strcmp($c,$b);

//Return 2 because $c is greater than $a by two (67 > 65 )
echo strcmp($c,$a);

【讨论】:

  • 这可能适用于您和许多其他实现,但它仍然未定义,取决于实现并且将来可能会改变。我记得使用汇编命令比较字符串的硬件,只修改状态寄存器中的标志。这里的值是由标志而不是差异创建的。 Qnd 如果比较strcmp("a","ac"),结果是什么? -1 在我的电脑上。
  • 我也得到了 -1,但 'a' 确实比 'ac' 小,虽然它的计算方式超出了我的能力
  • 我的评论只是针对结果的绝对值,所以不要指望-3除了-1还有其他含义。是的,"a" 小于 "ac",ASCII cNUL 之间的差异是 99。
【解决方案2】:

strcmp 用于比较 PHP 中的两个字符串。 如果您的结果大于 0,则其平均变量一 ($a) 大于 Var2($b) 如果返回结果小于 0,则意味着 $b 更大,如果结果等于 0,则意味着两个字符串彼此相等。

$a="Hello world!";
$b= "Hello world!";
var_dump(strcmp($a, $b)); // result is 0

$a = "Hello";
$b = "Hello World";
var_dump(strcmp($a, $b)); // Outputs: -6

如果你想看到不同,那么你可以使用这个

$a = 'some-content-here-example';
$b = 'some-content-example';
$asp = preg_split('//', $a, -1);
$bsp = preg_split('//', $b, -1);

$l1 = count($asp);
$l2 = count($bsp);

$length = $l1;
if ($l2 > $l1) {
    $length = $l2;
}
$record = null;
$x = null;
for ($x = 0; $x < $length; $x++) {
    if ($a[$x] != $b[$x]) {
        if (!isset($a[$x])) {
            $record.= $b[$x];
        } else {
            $record.= $a[$x];
        }
    }
}

echo $record;

【讨论】:

    猜你喜欢
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 2011-10-12
    • 2020-12-18
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    相关资源
    最近更新 更多