[PHP-users 26326] uksort()でキーを使用してソート出来ない
haru @ apacheuser.info
haru @ apacheuser.info
2005年 7月 29日 (金) 11:28:18 JST
はじめて投稿させて頂きます内田と申します。
多次元配列を、特定の要素同士を比較してソートしたい時に今までは
usort()を使用し、問題なく動作していたのですが、今回配列のキーも
保持する必要が出てきたため、uksort()を使ってみたのですが
期待通り動作しません。
下記のサンプルスクリプトを例に上げて説明させて頂きます。
----ココカラ----
<?php
$array[0] = array( "0" => 1 ,"num" => "1" );
$array[1] = array( "0" => 2 ,"num" => "2" );
$array[2] = array( "0" => 3 ,"num" => "3" );
function my_multi_usort($a,$b){
if ( $a[0] < $b[0] ) return 1;
if ( $a[0] > $b[0] ) return -1;
return 0;
}
function my_multi_uksort($a,$b){
if ( $a[num] < $b[num] ) return 1;
if ( $a[num] > $b[num] ) return -1;
return 0;
}
uksort ($array,"my_multi_uksort");
print ("キーでソート:");
print_r ($array[0]);
print ("<br>");
usort ($array,"my_multi_usort");
print ("添え字でソート:");
print_r ($array[0]);
print ("<br>");
?>
----ココマデ----
このスクリプトを走らせると、usort()でソートした際には、
$array[0]にソートする前の$array[2]の要素が入っているかと思います。
しかしuksort()でソートした多次元配列はソート後もソート前もまったく要素が
変わっていません。
使い方は間違っていないかと思うのですが、
何かご存知の方いらっしゃいましたら
ご教示頂ければと思います。よろしくお願い致します。
PHP-users メーリングリストの案内