PHPのusort()
関数は、コールバック関数を使い、配列の要素を、値で並べ替える組み込み関数。
並べ替える前のキーは保持しない。並べ替えると、新たな数値キーを割り当てる。
定義
論理型 usort( 配列型 &$array, コールバック $cmp_function );
パラメータ
- 配列型 &$array
並べ替える対象の配列を指定。
- コールバック $cmp_function
比較に用いるユーザー定義関数を指定。
ここで呼び出すユーザー定義関数は、1つ目の引数と、2つ目の引数を、比較演算子(関係演算子)などを使って比較し、「0」「正の整数」「負の整数」のいづれかを返すようにしなければならない。
戻り値
論理値。
並べ替えに成功すると「TRUE」、失敗すると「FALSE」を返す。
構文
コールバック関数を使い、配列要素を、値でソート
論理値 = usort( 配列, コールバック関数 );
「コールバック関数」に指定したユーザー定義関数を使い、「配列」の要素を、値で並べ替える。
サンプル
配列の要素を、値の昇順でソート(数値)
<pre>
<?php
function compare( $a, $b ) {
if ( $a == $b ) {
return 0;
}
return ( $a > $b ) ? 1 : -1;
}
$varArray = array( 2, 10, 7, 500, 70 );
usort( $varArray, "compare" );
print_r( $varArray );
?>
</pre>
<?php
function compare( $a, $b ) {
if ( $a == $b ) {
return 0;
}
return ( $a > $b ) ? 1 : -1;
}
$varArray = array( 2, 10, 7, 500, 70 );
usort( $varArray, "compare" );
print_r( $varArray );
?>
</pre>
↓↓↓出力結果↓↓↓
Array
(
[0] => 2
[1] => 7
[2] => 10
[3] => 70
[4] => 500
)
(
[0] => 2
[1] => 7
[2] => 10
[3] => 70
[4] => 500
)
新たな数値キーを割り当てている点に注目。
配列の要素を、値の降順でソート(数値)
<pre>
<?php
function compare( $a, $b ) {
if ( $a == $b ) {
return 0;
}
return ( $a < $b ) ? 1 : -1;
}
$varArray = array( 2, 10, 7, 500, 70 );
usort( $varArray, "compare" );
print_r( $varArray );
?>
</pre>
<?php
function compare( $a, $b ) {
if ( $a == $b ) {
return 0;
}
return ( $a < $b ) ? 1 : -1;
}
$varArray = array( 2, 10, 7, 500, 70 );
usort( $varArray, "compare" );
print_r( $varArray );
?>
</pre>
↓↓↓出力結果↓↓↓
Array
(
[0] => 500
[1] => 70
[2] => 10
[3] => 7
[4] => 2
)
(
[0] => 500
[1] => 70
[2] => 10
[3] => 7
[4] => 2
)
配列の要素を、値の昇順でソート(文字列)
<pre>
<?php
function compareA( $a, $b ) {
return strcmp( $a, $b );
}
function compareB( $a, $b ) {
return strcasecmp( $a, $b );
}
$varArray = array( "white", "black", "Red", "Blue", "Green" );
echo "大文字小文字を区別すると、<br />";
usort( $varArray, "compareA" );
print_r( $varArray );
echo "大文字小文字を区別しないと、<br />";
usort( $varArray, "compareB" );
print_r( $varArray );
?>
</pre>
<?php
function compareA( $a, $b ) {
return strcmp( $a, $b );
}
function compareB( $a, $b ) {
return strcasecmp( $a, $b );
}
$varArray = array( "white", "black", "Red", "Blue", "Green" );
echo "大文字小文字を区別すると、<br />";
usort( $varArray, "compareA" );
print_r( $varArray );
echo "大文字小文字を区別しないと、<br />";
usort( $varArray, "compareB" );
print_r( $varArray );
?>
</pre>
↓↓↓出力結果↓↓↓
大文字小文字を区別すると、
Array
(
[0] => Blue
[1] => Green
[2] => Red
[3] => black
[4] => white
)
大文字小文字を区別しないと、
Array
(
[0] => black
[1] => Blue
[2] => Green
[3] => Red
[4] => white
)
Array
(
[0] => Blue
[1] => Green
[2] => Red
[3] => black
[4] => white
)
大文字小文字を区別しないと、
Array
(
[0] => black
[1] => Blue
[2] => Green
[3] => Red
[4] => white
)
連想配列の要素を、値の昇順でソート(文字列)
<pre>
<?php
function compareA( $a, $b ) {
return strcmp( $a, $b );
}
function compareB( $a, $b ) {
return strcasecmp( $a, $b );
}
$varArray = array(
"a" => "white",
"b" => "black",
"c" => "Red",
"d" => "Blue",
"e" => "Green"
);
echo "大文字小文字を区別すると、<br />";
usort( $varArray, "compareA" );
print_r( $varArray );
echo "大文字小文字を区別しないと、<br />";
usort( $varArray, "compareB" );
print_r( $varArray );
?>
</pre>
<?php
function compareA( $a, $b ) {
return strcmp( $a, $b );
}
function compareB( $a, $b ) {
return strcasecmp( $a, $b );
}
$varArray = array(
"a" => "white",
"b" => "black",
"c" => "Red",
"d" => "Blue",
"e" => "Green"
);
echo "大文字小文字を区別すると、<br />";
usort( $varArray, "compareA" );
print_r( $varArray );
echo "大文字小文字を区別しないと、<br />";
usort( $varArray, "compareB" );
print_r( $varArray );
?>
</pre>
↓↓↓出力結果↓↓↓
大文字小文字を区別すると、
Array
(
[0] => Blue
[1] => Green
[2] => Red
[3] => black
[4] => white
)
大文字小文字を区別しないと、
Array
(
[0] => black
[1] => Blue
[2] => Green
[3] => Red
[4] => white
)
Array
(
[0] => Blue
[1] => Green
[2] => Red
[3] => black
[4] => white
)
大文字小文字を区別しないと、
Array
(
[0] => black
[1] => Blue
[2] => Green
[3] => Red
[4] => white
)
新たな数値キーを割り当てている点に注目。
コールバックにメソッドを使いソート
<?php
class mySort
{
var $value;
function __construct( $value ) {
$this->value = $value;
}
static function compare( $a, $b ) {
if ( $a == $b ) {
return 0;
}
return ( $a > $b ) ? +1 : -1;
}
}
$varArray = array( 500, 5, 2, 50, 10 );
foreach ( $varArray as $value ) {
$varObj[] = new mySort( $value );
}
usort( $varObj, array( "mySort", "compare" ) );
foreach ( $varObj as $item ) {
echo $item->value . "<br />";
}
?>
class mySort
{
var $value;
function __construct( $value ) {
$this->value = $value;
}
static function compare( $a, $b ) {
if ( $a == $b ) {
return 0;
}
return ( $a > $b ) ? +1 : -1;
}
}
$varArray = array( 500, 5, 2, 50, 10 );
foreach ( $varArray as $value ) {
$varObj[] = new mySort( $value );
}
usort( $varObj, array( "mySort", "compare" ) );
foreach ( $varObj as $item ) {
echo $item->value . "<br />";
}
?>
↓↓↓出力結果↓↓↓
2
5
10
50
500
5
10
50
500
クラスやメソッドについては、オブジェクト指向プログラミングの、クラス、プロパティ、メソッドの、定義と呼び出しの基本へ。