我有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
。
答案 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
答案 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 )
。
<?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之后