PHP の array_multisort は Schwartzian Transform 向きかな
2007-11-07-3
[Programming]
- 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 の例では、下記の配列を
別の配列を用意して array_multisort を使っています。
これって、 array_multisort を使うまでもなく、 usort で済みますよね。
無名関数 (see プログラミング PHP 第2版, p.77)
を使ってこんな感じに。
http://d.hatena.ne.jp/fbis/20071024)
akiyan.com 例では、なんか無駄なことをしている気がして、
「array_multisort ってこういうデータに使うのか!」と
納得しちゃう人が現れると思うと夜も眠れません!(おおげさ)
分かりやすく説明するためのサンプルといえども、
Manual ページにあるような、
array_multisort を使う必然性のあるものが良いと思いました。
■プログラミングPHP 第2版
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 の例では、下記の配列を
amount の降順でソートするために、$sales = array( 2 => array( 'title' => 'ほげほげ1', 'amount' => 3, ), 1 => array( 'title' => 'ほげほげ2', 'amount' => 2, ), 0 => array( 'title' => 'ほげほげ3', 'amount' => 5, ), );
別の配列を用意して 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版