古い記事
ランダムジャンプ
新しい記事
- PHP: array_multisort - Manual
  http://jp2.php.net/array_multisort
- PHPのarray_multisort関数が激便利だったので紹介 : akiyan.com
  http://www.akiyan.com/blog/archives/2007/10/phparray_multis.html

PHP の array_multisort 関数というのが紹介されています。
ある配列をソートするときに、別な配列の値を使ってソートする、というものですね。

Perl のシュウォーツ変換、シュワルツ変換 (Schwartzian Transform)
[2003-07-11-2]っぽいことを PHP で実現するために使うのに良さげ。
そういう目的で用意された関数なのかも。

それはそうと、 akiyan.com のサンプルが、なんというか本質からずれていて良くないと思います。

akiyan.com の例では、下記の配列を
$sales = array(
  2 => array(
    'title' => 'ほげほげ1',
    'amount' => 3,
  ),
  1 => array(
    'title' => 'ほげほげ2',
    'amount' => 2,
  ),
  0 => array(
    'title' => 'ほげほげ3',
    'amount' => 5,
  ),
);
amount の降順でソートするために、
別の配列を用意して array_multisort を使っています。
$amounts = array();
foreach ($sales as $v) $amounts[] = $v['amount'];
array_multisort($amounts, SORT_DESC, SORT_NUMERIC, $sales);

これって、 array_multisort を使うまでもなく、 usort で済みますよね。
無名関数 (see プログラミング PHP 第2版, p.77)
を使ってこんな感じに。
<?php
$sales = array(
  2 => array(
    'title' => 'ほげほげ1',
    'amount' => 3,
  ),
  1 => array(
    'title' => 'ほげほげ2',
    'amount' => 2,
  ),
  0 => array(
    'title' => 'ほげほげ3',
    'amount' => 5,
  ),
);
var_dump($sales);
usort($sales, create_function('$a,$b', 
  'return($b[\'amount\'] - $a[\'amount\']);'));
var_dump($sales);
?>
追記: 同様のことを考えていた人がいました。
  http://d.hatena.ne.jp/fbis/20071024

akiyan.com 例では、なんか無駄なことをしている気がして、
「array_multisort ってこういうデータに使うのか!」と
納得しちゃう人が現れると思うと夜も眠れません!(おおげさ)

分かりやすく説明するためのサンプルといえども、
Manual ページにあるような、
array_multisort を使う必然性のあるものが良いと思いました。

プログラミングPHP 第2版