PHP字符串包含整数

PHP字符串包含整数,php,mysql,Php,Mysql,我有以下字符串,如下所示: 1BG200,1M400,1BA1000 我想把上面的字符串比较成Desc顺序 代码: 输出: 1M400 1BG200 1BA1000 应该是1000更大,然后是400,200..我如何比较它们?我认为比较包含整数的字符串是不对的!我找不到解决问题的正确方法 有些人建议使用preg_match或substr。但正如您所看到的,有单字符和双字符,例如M和BG 对不起,我对PHP不太熟悉。。请帮忙 您可以使用preg_replace('/[0-9][A-Z]+/'

我有以下字符串,如下所示:

1BG200,1M400,1BA1000
我想把上面的字符串比较成Desc顺序

代码:

输出:

1M400
1BG200
1BA1000 
应该是1000更大,然后是400,200..我如何比较它们?我认为比较包含整数的字符串是不对的!我找不到解决问题的正确方法

有些人建议使用
preg_match
substr
。但正如您所看到的,有单字符和双字符,例如M和BG


对不起,我对PHP不太熟悉。。请帮忙

您可以使用
preg_replace('/[0-9][A-Z]+/','','$var)
删除第一个数字和后面的多个字母,然后使用php。

您可以使用自定义排序,只查看数字部分

function cmp($a, $b)
{
    $numa = intval(preg_replace('/[0-9]*[A-Z]+/', '', $a));
    $numb = intval(preg_replace('/[0-9]*[A-Z]+/', '', $b));
    if($a == $b) return 0;
    return ($a < $b) ? -1 : 1;
}

//Now get the list and sort
usort($list, "cmp");
函数cmp($a,$b)
{
$numa=intval(preg_replace('/[0-9]*[A-Z]+/','','$A));
$numb=intval(preg_replace('/[0-9]*[A-Z]+/',''$b));
如果($a==$b)返回0;
回报率($a<$b)?-1:1;
}
//现在获取列表并进行排序
usort($list,“cmp”);

您可以将用户定义的preg函数添加到mysql()。
然后在ORDERBY子句中使用PREG_CAPTURE。

您可以向MySQL添加自定义函数。找到一个看起来可以去掉所有非数字字符的

如果您因为返回大量结果而决定使用limit/offset,我强烈建议您这样做,而不是将所有内容都带回php并进行排序。否则,您将不得不将所有内容拉回到PHP,然后拼接一个数组,在这一点上,我觉得这将是对资源的低效使用


或者,如果这是一个可行的选项,您可以向表中添加一个排序列,以便更好地利用MySQL中的索引,这取决于您的记录集,可能会有巨大的性能差异。

一般来说,preg是昂贵的。为了从给定的模式中获得一个数字,我会这样做:

digitstri='1M400'; // just an example
number=intval(is_number(digitstri{2})?substr(digitstri,2):substr(digitstri,3))

我想,从那里排序是很清楚的…

因此,排序算法唯一依赖的部分是结束数字序列?@Daniel我想比较完整的字符串,但似乎它对我不起作用。因此,是的,我想忽略字母和排序数字序列。此外,如果您希望前导数字也成为排序算法的一部分,您可以将模式交换为
“/[^0-9]/”
,它将根据所有数字进行排序。
digitstri='1M400'; // just an example
number=intval(is_number(digitstri{2})?substr(digitstri,2):substr(digitstri,3))