usort
(PHP 3 >= 3.0.3, PHP 4, PHP 5)
usort -- ユーザー定義の比較関数を使用して、配列を値でソートする
説明
bool
usort
( array &array, callback cmp_function )
この関数は、ユーザー定義の比較関数により配列をその値でソートします。 ソートしたい配列を複雑な基準でソートする必要がある場合、 この関数を使用するべきです。
比較関数は、最初の引数が 2 番目の引数より小さいか、等しいか、大きい場合に、 それぞれゼロ未満、ゼロに等しい、ゼロより大きい整数を返す 必要があります。
注意:
二つのメンバーの比較結果が等しいとなった場合、 ソートされた配列の順番は定義されません。PHP 4.0.6 までは、 ユーザー定義関数はそれらの要素の順番を維持します。しかし PHP 4.1.0 以降で導入された新しいソートアルゴリズムでは、 それと同等のことを行う効果的な方法はありません。
注意:
この関数は、
array
パラメータの要素に対して新しいキーを割り当てます。 その際、単純にキーを並べ替える代わりに、 すでに割り当てられている既存のキーを削除してしまいます。
成功した場合に
TRUE
を、失敗した場合に
FALSE
を返します。
例 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"
);
foreach (
$a
as
$key
=>
$value
) {
echo
"$key: $value
\n
"
;
}
?>
|
上の例の出力は以下となります。
|
注意:
もちろん、このような簡単な例では
rsort()
関数の方がより適当です。
例 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
|
|
例 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"
);
usort
(
$a
, array(
"TestObj"
,
"cmp_obj"
));
foreach (
$a
as
$item
) {
echo
$item
->
name
.
"\n"
;
}
?>
|
上の例の出力は以下となります。
|
uasort()
、
uksort()
、
sort()
、
asort()
、
arsort()
、
ksort()
、
natsort()
および
rsort()
も参照ください。