2013-01-11 6 views

답변

2

나는 응답 한 모든 사람이()이 STRCMP를 동의 정답이지만, 지금까지 제공 한 모든 대답은 당신에게 잘못된 결과를 줄 것이라 생각합니다. 예 :

echo strcmp("Z", "a"); 

결과 : -1

echo strcmp("z", "A"); 

결과 : 1

STRCMP()로 각각의 문자가 아닌 문자의 위치의 이진 (ORD) 위치를 비교한다 너 욕망이야. 올바른 결과를 원한다면 비교하기 전에 문자열을 동일한 대/소문자로 변환해야합니다. 예를 들어 :

if(strcmp(strtolower($str1), strtolower($str2)) < 0) 
{ 
    echo "String 1 comes before string 2"; 
} 

편집 : 당신은 또한 strcasecmp()를 사용할 수 있지만, 내가 피하기 위해 경향이 내가이 멀티 바이트 문자열을 이해하는 시간을 찍은 적이 없다 동작을 보여 때문이다. 모든 라틴 문자 세트를 항상 사용한다면 괜찮습니다.

+0

+1 "올바른 결과를 원한다면 _ (당신이하는 것으로 가정합니다) _". 그리고 만약 내가 할 수있는 완전한/정답에 대한 또 다른 줄. 좋은 것. – Sepster

1

당신이 시도 했는가 ... 확신이

<?php 
if(strcmp($var1,$var2) > 0) { 
    return true; 
} 
0

당신은 http://php.net/manual/en/function.strcmp.php

반환을 사용해야 작동 < 0 str1이 str2보다 작다면, > str1이 str2보다 크면 0, 같으면 0.

그래서

return strcmp(var1, var2) > 0 // will return true if var1 is after var2 
1

return strcmp($var1,$var2) > 0?

1

한 문자를 비교하는 경우 ord(string)을 사용할 수 있습니다. 대문자 값은 소문자보다 작은 것으로 비교되므로 비교를 수행하기 전에 char을 소문자로 변환하십시오. 당신이 문자열 (또는 문자)를 비교하는 경우

function earlierInAlphabet($char1, $char2) 
{ 
    $char1 = strtolower($char1); 
    $char2 = strtolower($char2); 

    if(ord($char1) < ord($char2)) 
     return true; 
    else 
     return false; 
} 

function laterInAlphabet($char1, $char2) 
{ 
    $char1 = strtolower($char1); 
    $char2 = strtolower($char2); 

    if(ord($char1) > ord($char2)) 
     return true; 
    else 
     return false; 
} 

당신은 또한 strcasecmp(str1, str2) 사용할 수 있습니다

if(strcasecmp($str1, $str2) > 0) 
    // str1 is later in the alphabet 
0

이 솔루션이 될 수 이상 - 더 - 상단 두 변수; 당신이 두 변수를 함께하고 싶어하지만이 ... 당신이 변수의 무리 (2+) 올바른 순서 될 경우 해결하기 위해 이제까지 필요로하는 경우에 대한보다 다른

<?php 
    $var1='Z'; 
    $var2='a'; 
    $array1 = array(); 
    $array[] = $var1; 
    $array1[] = $var2; 

    $array2 = sort($array1); 
    if($array2 === $array1){ 
    return true; 
    }else{ 
    return false; 
    } 
    ?> 

인이해야 잘 작동합니다.

<?php 
     return (strcmp($var1,$var2) > 0); 
    ?>