strcmp는 PHP의 정수(intcmp)와 동등합니다.
그래서 우리는 이 기능을 PHP에서 얻었습니다.
strcmp(string $1,string $2) // returns -1,0, or 1;
단, intcmp()는 없습니다.그래서 다음 중 하나를 작성했습니다.
function intcmp($a,$b) {
if((int)$a == (int)$b)return 0;
if((int)$a > (int)$b)return 1;
if((int)$a < (int)$b)return -1;
}
그냥 지저분하게 느껴져요.다들 어떻게 생각하세요?
이는 전달된 순서 값을 기준으로 Javascript를 정렬하는 클래스의 일부입니다.
class JS
{
// array('order'=>0,'path'=>'/js/somefile.js','attr'=>array());
public $javascripts = array();
...
public function __toString()
{
uasort($this->javascripts,array($this,'sortScripts'));
return $this->render();
}
private function sortScripts($a,$b)
{
if((int)$a['order'] == (int)$b['order']) return 0;
if((int)$a['order'] > (int)$b['order']) return 1;
if((int)$a['order'] < (int)$b['order']) return -1;
}
....
}
데이터 정렬 방법:
function sortScripts($a, $b)
{
return $a['order'] - $b['order'];
}
역순서를 원할 경우 $b-$a를 사용합니다.
문제의 숫자가 PHP의 정수 범위를 초과할 경우,return ($a < $b) ? -1 : (($a > $b) ? 1 : 0)
보다 견고합니다.
추가 정보로서만 이 RFC(https://wiki.php.net/rfc/combined-comparison-operator))가 인정되고 있습니다.
따라서 비교 함수는 ...과 비슷합니다.
<?php
$data = [...];
usort($data, function($left, $right){ return $left <=> $right; });
?>
여기에서는 다른 모든 비교와 동일한 방법으로 비교가 수행된다는 점이 매우 좋습니다.그래서 활자 저글링은 예상대로 일어날 것이다.
현시점에서는 오브젝트가 비교값을 표시할 수 있는 매직 __forCompare() 메서드는 없습니다.현재의 제안(다른 RFC)은 비교 중에 각 오브젝트를 다른 오브젝트에 삽입하여 비교가 이루어지도록 하는 것입니다.이것에 의해, 재귀나 스택 오버플로의 가능성이 있습니다.! 비교용으로 오브젝트의 타입을 삽입하거나(개체를 허가하거나) 어느쪽인가를 생각할 수 있습니다.비교 유형에 따라 적절한 값을 나타낼 수 있는 능력) 또는 비교 대상이 제공할 수 있는 값에 대한 블라인드 요청이 더 안전한 해결책이었을 것입니다.
아직 PHP-NG(현재는 PHP 7)에 통합되지 않았지만 곧 통합될 것으로 예상됩니다.
사용할 수 있습니다.
function intcmp($a,$b)
{
return ($a-$b) ? ($a-$b)/abs($a-$b) : 0;
}
이 기능을 사용하는 이유는 전혀 모르겠습니다만,
왜 바퀴를 재창조하는 거죠?http://php.net/manual/en/function.strnatcmp.php
echo strnatcmp(1, 2) . PHP_EOL; // -1
echo strnatcmp(10, 2) . PHP_EOL; // 1
echo strnatcmp(10.5, 2) . PHP_EOL; // 1 - work with float numbers
echo strnatcmp(1, -2) . PHP_EOL; // 1 - work with negative numbers
테스트: https://3v4l.org/pSANR
꼭 +1과 -1이어야 하나요?그렇지 않으면 그냥 돌아오세요.(int) $a - (int) $b
다른 사람이 추천한 분할이 마음에 들지 않으며, 세 가지 경우 모두 확인할 필요가 없습니다.더 크거나 같지 않으면 더 작아야 합니다.
return (int) $a > (int) $b ? 1 : (int) $a == (int) $b ? 0 : -1;
언뜻 보면 지저분한 느낌이 들어요.하지만 당신이 그걸 쓴 이유가 분명 있을거에요. 단지 실제를 사용하는 대신요.==
,>
,그리고.<
오퍼레이터.이 기능을 만든 동기는 무엇입니까?
나라면 아마 이렇게 했을 거야
$x = $a==$b ? 0 : ($a>$b ? 1 : ($a<$b ? -1 : null));
나도 이게 못난 짓이란 걸 알아: null;
로 하는지, 할 수 하지 않다 - PHP는 그것을 필요로 하는지, 나는 단지 할 수 있었다.:;
!!!!!!!!!!!원래 요구 사항을 알고 있으면 훨씬 덜 혼란스러울 것 같아요!
문자열의 경우
usort($points, function ($a, $b) use ($orderFlag, $key1, $key2) {
return strcmp($a[$key1][$key2], $b[$key1][$key2]) * $orderFlag;
});
orderFlag = > 1 (수직): -1 (내림차순)
숫자의 경우
usort($points, function ($a, $b) use ($orderFlag, $key1, $key2) {
return ($a[$key1][$key2] - $b[$key1][$key2]) * $orderFlag;
});
orderFlag = > 1 (수직): -1 (내림차순)
언급URL : https://stackoverflow.com/questions/2852621/strcmp-equivelant-for-integers-intcmp-in-php
'itsource' 카테고리의 다른 글
matplotlib에서 하위구에 xlim 및 ylim을 설정하는 방법 (0) | 2023.01.19 |
---|---|
Vue.js: Nuxt 오류 처리 (0) | 2023.01.19 |
Java 11을 사용한 디버깅 중 "부트스트랩 클래스 경로가 추가되었기 때문에 공유는 부트 로더 클래스에 대해서만 지원됩니다" 경고를 피하는 방법 (0) | 2023.01.19 |
PHP Regex가 유튜브 비디오 ID를 얻습니까? (0) | 2023.01.19 |
PHP에서 사용할 압축 방법을 선택하십시오. (0) | 2023.01.19 |