【问题标题】:wrong output when compare two string [closed]比较两个字符串时输出错误[关闭]
【发布时间】:2018-11-13 14:34:38
【问题描述】:

我想比较 2 个以太地址。

我尝试了修剪、strcmo 和替换空字符。但它不起作用

这是我的代码:

<?php
$a='0x0c656968912fF22c17ABf5E190498034542CC475';
$b='0x0c656968912ff22c17abf5e190498034542cc475';
$a2 = str_replace("\0", "", $a);
$b2 = str_replace("\0", "", $b);

var_dump($a == $b);
var_dump($a2 == $b2);
var_dump(strcmp($a,$b));
var_dump(strcmp($a2,$b2));

看起来上面的所有 var_dump 都应该返回 true(在 strcmp 中为 0),但它们没有! 为什么?! 这是一个错误吗? 我如何比较这个字符串

【问题讨论】:

  • 它们是不同的字符串。你有一个大写字母而不是另一个。如果您需要不区分大小写的比较,请查看strcasecmp() 或在两个字符串上应用strtolower()/strtoupper() 以使它们的字母相等。
  • 两个字符串不相等。第一个包含一些大写字母;第二个没有。
  • @MohammadSalehi 我个人对编程的定义是 99 次失败,然后是 1 次成功,所以继续努力,不要放弃。我向你保证,你以后不会被这种情况所迷惑。
  • 这里有一个提示:"A" != "a"
  • 我知道这个问题不是一个好问题,我没有删除我的问题,因为我认为有人可能会出现同样的问题。请停止投票

标签: php string compare strcmp


【解决方案1】:

您正在体验strcmp 函数 here. 的 PHP 文档的第一个示例中演示的内容

基本上,比较是区分大小写的。因此,strcmp 不会返回 true,因为 $a 的第 15 位中的字符 F 是大写的,而 $b 中的字符是小写。

见下文,用下划线突出显示:

$a='0x0c656968912f_F_22c17ABf5E190498034542CC475';
$b='0x0c656968912f_f_22c17abf5e190498034542cc475';

经重新考虑,两个字符串之间还有其他大小写不匹配的情况。

【讨论】:

  • 它看起来甚至与== 它是区分大小写的。
  • 在通过在线 php 沙箱确认后,我修改了答案以反映这一点。现在去检查为什么我的 php 脚本在使用该运算符时似乎没有区分字符大小写。哦,男孩。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
相关资源
最近更新 更多