【问题标题】:Compare string "numerically first"比较字符串“数字优先”
【发布时间】:2013-05-02 16:20:06
【问题描述】:

我想“数字地”比较两个字符串。我的意思是2C 小于11A。我试过了,但它不起作用:

if("2A" < "11A"){
    echo "First corect";
}

if(strcmp("2A", "11A") < 0){
    echo "Last corect";
}

echo "Tests completed";

【问题讨论】:

  • 您必须先使用正则表达式分隔字符串标记。然后您可以先对标记进行排序,然后再重新组合结果。
  • 您对“数字”的确切含义是什么?
  • 2A 和 11A 是十六进制数吗?
  • 您是对这些项目的数组还是仅对两个项目进行排序?
  • @loler 我认为这意味着首先您将它们作为数字进行比较(因此 2

标签: php string sorting compare


【解决方案1】:

试试这样:

if((int) '2A' < (int) '11A'){
    echo "First correct";
}

你也可以看看:http://php.net/manual/en/function.intval.php

【讨论】:

    【解决方案2】:

    您正在寻找strnatcmp(或其不区分大小写的兄弟strnatcasecmp)。

    这会将您输入的数字部分作为数字(将“2whatever”放在“11whatever”之前)和文本部分作为文本(将“2a”放在“2b”之前)进行比较。

    【讨论】:

      【解决方案3】:
      if(intval(0x2A) < intval(0x11A)){
          echo "First corect";
      }
      else
      {
          echo "Tests incompleted";
      }
      

      试试这个代码

      【讨论】:

        【解决方案4】:

        编写一个函数:

        1. 将每个字符串标记为一个列表&lt;Object&gt;,其中每个对象可以是一个字符串整数,其中整数是从非数字之间的连续数字字符串创建的,字符串是任意 2 位数字之间的连续非数字。
        2. 在循环中逐个元素地比较两个列表。如果对象的类型不匹配(即,将整数与字符串进行比较),请做出较小/较大的决定,您希望将其排序为较小的字母或数字。如果它们匹配,只需进行小于等于大于比较。
        3. 如果列表中的两个Nth elements相等,则继续比较N+1th elements,否则根据整数到整数或字符串到字符串的比较来比较return t/f

        【讨论】:

          猜你喜欢
          • 2022-11-21
          • 1970-01-01
          • 1970-01-01
          • 2013-05-06
          • 2013-11-12
          • 2013-08-12
          • 2011-09-17
          • 1970-01-01
          • 2014-09-02
          相关资源
          最近更新 更多