usort
(PHP 4, PHP 5)
usort — 사용자-정의된 비교함수를 사용하여 값들에 의해 배열을 정렬한다
설명
이 함수는 사용자-지원 비교 함수를 사용하여 값들에 의해 배열을 정렬할 것이다. 정렬하고자 하는 배열이 흔히 사용되지 않는 방법에 의해 정렬할 필요가 있으면, 이 함수를 사용해야 한다.
비교 함수는 첫번째 인자가 두번째 인자보다 작거나, 같거나, 크다고 판단되면 0 보다 작거나, 같거나, 큰 정수를 반환해야 한다.
Note: 두 인자들이 같다면, 정렬된 배열에서 그들 순서는 알 수 없다. PHP 4.0.6 까지 사용자 정의 함수는 그들 원소에 대해서 원래의 순서를 유지할것이다. 그러나 4.1.0부터 사용되는 새로운 정렬 알고리즘에서는 더이상 그런 경우에 효율적인 방법의 그런 동작을 하는 해결책이 존재하지않는다.
Example#1 usort() 예제코드
<?php
function cmp ($a, $b) {
if ($a == $b) return 0;
return ($a < $b) ? -1 : 1;
}
$a = array (3, 2, 5, 6, 1);
usort ($a, "cmp");
while (list ($key, $value) = each ($a)) {
echo "$key: $value\n";
}
?>
위 예제코드는 다음을 출력할것이다:
0: 1 1: 2 2: 3 3: 5 4: 6
Note: 명백히 이런 흔한 경우에는 sort() 함수는 더욱 적절할것이다.
Example#2 다차원 배열을 사용하는 usort() 예제코드
<?php
function cmp ($a, $b) {
return strcmp($a["fruit"], $b["fruit"]);
}
$fruits[0]["fruit"] = "lemons";
$fruits[1]["fruit"] = "apples";
$fruits[2]["fruit"] = "grapes";
usort($fruits, "cmp");
while (list ($key, $value) = each ($fruits)) {
echo "\$fruits[$key]: " . $value["fruit"] . "\n";
}
?>
다차원 배열을 정렬할 때에는, $a와 $b는 배열의 첫번째 인덱스의 참조를 포함한다.
위 예제코드는 다음을 출력할것이다:
$fruits[0]: apples $fruits[1]: grapes $fruits[2]: lemons
Example#3 객체의 멤버 함수를 사용하는 usort() 예제코드
<?php
class TestObj {
var $name;
function TestObj($name)
{
$this->name = $name;
}
/* This is the static comparing function: */
function cmp_obj($a, $b)
{
$al = strtolower($a->name);
$bl = strtolower($b->name);
if ($al == $bl) return 0;
return ($al > $bl) ? +1 : -1;
}
}
$a[] = new TestObj("c");
$a[] = new TestObj("b");
$a[] = new TestObj("d");
uasort($a, array ("TestObj", "cmp_obj"));
foreach ($a as $item) {
print $item->name."\n";
}
?>
위 예제코드는 다음을 출력한다:
b c d
uasort(), uksort(), sort(), asort(), arsort(),ksort(), natsort(), rsort() 참고.