March 3, 2014

usort(),uasort(),uksort()の挙動を確認してみた

標準のソート関数であるsort()やksort()等の他に、ユーザ定義な基準でソートが出来るusort(),uasort(),uksort()があります。たまに使ったことはある気がしますが、ちゃんと覚えていないので、挙動の確認をしてみました。

http://www.php.net/manual/ja/function.usort.php
http://www.php.net/manual/ja/function.uasort.php
http://www.php.net/manual/ja/function.uksort.php

それぞれ、戻り値(数値)の昇順にソートされます。
<?php

$origin = $array = [
    'x' => 'XXXX',
    'xxx' => 'XX',
    'xx' => 'XXX',
    'xxxx' => 'X',
];

// $arrayを、文字数の少ない値順でソートする。キーは0から振り直される
usort($array, function ($x, $y) {
        return strlen($x) - strlen($y);
});

print_r($array);
/*
Array
(
    [0] => X
    [1] => XX
    [2] => XXX
    [3] => XXXX
)
*/

// $arrayを元に戻す
$array = $origin;

// $arrayを、文字数の少ない値順でソートする。キーは維持される
uasort($array, function ($x, $y) {
        return strlen($x) - strlen($y);
});

print_r($array);
/*
Array
(
    [xxxx] => X
    [xxx] => XX
    [xx] => XXX
    [x] => XXXX
)
*/

// $arrayを、文字数の少ないキー順でソートする
uksort($array, function ($x, $y) {
        return strlen($x) - strlen($y);
});

print_r($array);
/*
Array
(
    [x] => XXXX
    [xx] => XXX
    [xxx] => XX
    [xxxx] => X
)
*/

No comments:

Post a Comment