检查字符串是在

时间:2018-09-03 08:06:19

标签: php

我有2个字符串:

$string_1 = 'c5';
$string_2 = 'c6';

我想检查$string_2是在{em>之后还是在之前 $string_1,如果两者都是按字母顺序排列的。

因此在上面的示例中,$string_2$string_1之后。但是,如果$string_2的值为c2,那么它将在$string_1 ...

之前出现

用布尔结果执行此检查的可靠方法是什么?

到目前为止我已经尝试过的

我可以将字符串添加到数组中,按字母顺序对数组进行排序,然后检查$string_2作为$key的值是0还是1

编辑

请注意,c2应该先于 c11

5 个答案:

答案 0 :(得分:3)

制作数组,使用natsort对其进行排序,然后获得值较小的变量名

$string_1 = 'c5';
$string_2 = 'c6';
$res = compact('string_1', 'string_2'); // ['string_1' => 'c5', 'string_2' => 'c6']
natsort($res);
echo key($res); // name of variable with less value  

demo

答案 1 :(得分:1)

使用strpos()

$string_1 = "c2";
$string_2 = "c5";
$bigString = $string_1.$string_2; // Hypothetical string with string_1 and string_2 in alphabethical order in it
if(strpos($bigString, $string_1) > strpos($bigString, $string_2)) {
  echo 'true';
}
else {
  echo 'false';
}

答案 2 :(得分:1)

如果您使用的是PHP 7+,则可以使用spaceship operator min(a+b)比较两个字段。

<=>

将输出

$string_1 = 'c5';
$string_2 = 'c6';

echo ($string_1 <=> $string_2).PHP_EOL;
echo ($string_2 <=> $string_1).PHP_EOL;
echo ($string_1 <=> $string_1).PHP_EOL;

答案 3 :(得分:0)

不确定这是否是您的问题的答案,但是如果我理解正确,我会编写如下函数:

<?php

$a = 'test';
$b = 'vest';

function comp($one, $two) {
    $i = 0;
    while ($i < strlen($one) && $i < strlen($two)) {
        if (ord($one[$i]) > ord($two[$i])) {
            return true;
        } elseif (ord($one[$i]) < ord($two[$i])) {
            return false;
        } else {
            $i++;
        }
    }
}

var_dump(comp($a, $b));
var_dump(comp($b, $a));

答案 4 :(得分:0)

我想您可以使用int strcasecmp ( string $str1 , string $str2 )

https://eval.in/1053409

<?php
$string_1 = 'd';
$string_2 = 'c';

// Returns < 0 if str1 is less than str2; > 0 if str1 is greater than str2, and 0 if they are equal.
$return = strcasecmp($string_1, $string_2);

if($return < 0) {
echo "$string_1 is before $string_2";
} else if($return > 0) {
echo "$string_1 is after $string_2";
} else {
echo "$string_1 and $string_2 are equal";
}
  

d在c之后