array_multisort とか Schwartzian Transform とか

つうか、array_multisort は multi sort なんだから、sort key が複数ある場合に使うものだと思うのだが。sort key が複数あるというのは、まず著書名順で整列して同じ著者の著書は著書名順に並べるとかそういうのね。具体的には SQL で ORDER BY author, title とするとか、Microsoft Excel の並べ替えで最優先キーを列A、2番目に優先されるキーを列Bとかそういうの。
まぁ、Schwartzian Transform にも使えなくはないけど。素直にやると、usort、array_map、create_function を使って結構面倒だし。

<?php
$data = array(
    "1 2",
    "2 3",
    "3 4",
    "4 1",
    "5 5"
);

function cmp($a, $b) 
{
    return $a == $b ? 0 : $a < $b ? -1 : 1;
}

$t = array_map(create_function('$a', 'return explode(" ", $a);'), $data);
usort($t, create_function('$a, $b', 'return cmp($a[1], $b[1]);'));
$sorted = array_map(create_function('$a', 'return $a[0];'), $t);

print_r($sorted);
?>