[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 メーリングリストの案内