[PHP-users 22442]Re: 連想配列のソートに関しまして

Keisuke Hamanaka hamanaka015 @ d-cruise.co.jp
2004年 6月 30日 (水) 11:40:47 JST


濱中です。

Mattz様、ご回答ありがとうございました。
結論から申しますと、uasort関数を使ってうまく行きました。

実は前回のメールでは、配列を簡略化して表現していましたが、
実際は、
-----------------------------------------------------
$array[セッション番号1]["ホスト名"]=aaaa
$array[セッション番号1]["開始日付"]=2004/01/01
$array[セッション番号1]["開始時刻"]=00:00:00
$array[セッション番号1]["終了日付"]=2004/01/01
$array[セッション番号1]["終了時刻"]=01:00:00
・・・
$array[セッション番号1]["転送速度"]=100
$array[セッション番号1]["転送サイズ"]=512
-----------------------------------------------------
等という構造になっておりました。

uasort関数を使用するのにあたり、以下の2種類の比較関数を
作ってみました。
-----------------------------------------------------
<比較関数1>

function compare($val1,$val2){
 if ($val1==$val2){
  return 0;
 }elseif($val1 < $val2){
  return -1;
 }else{
  return 1;
 }
}
-----------------------------------------------------
<比較関数2>
function compare($val1,$val2){
 return strcmp($val1["host_name"] ,$val2["host_name"] );
}
-----------------------------------------------------
結果、比較関数1を使用した場合は、ホスト名でソートされた
だけでなく、開始日付などもきれいに昇順に並び替えてくれました。
比較関数2を使用した場合は、ホスト名のみのソートとなり、
開始日付などはソートされませんでした。

私が望んでいた結果は、比較関数1を使った結果だったのですが、
比較関数1を見ても、なぜこのような結果になるのかがわかりません。
はじめにホスト名でソートして、次に開始日付でソートして・・・という
具合に再帰的に処理を行ってくれているのでしょうか?不思議です。

なんだか魔法にかかったみたいですが、うまく行って本当によかったです。
ご教授くださいまして、本当にありがとうございました。

今後ともよろしくお願い致します。



----- Original Message ----- 
From: "MATSUO Tetsuji" <mattz @ yahoo.co.jp>
To: "PHP-users ML" <php-users @ php.gr.jp>
Sent: Wednesday, June 30, 2004 10:24 AM
Subject: [PHP-users 22440] Re: 連想配列のソートに関しまして


> Mattzです。
>
> --- Keisuke Hamanaka <hamanaka015 @ d-cruise.co.jp> からのメッセージ:
> > このためには、最初の配列$arrayを何らかの方法でソートしなければ
> > ならないかと思うのですが、連想配列のキーと値の関係を保持しながら
> > ソートするには、asort関数を使うことはわかりました。しかし、asort関数で
> > 多次元配列をソートする方法がわかりません。どのようにして、ソートの対象と
なる
> > キー("ホスト名")を指定したらよいのでしょうか?
>
> usort関数というものについて調べると幸せになります。
>
> --
> Mattz <mattz @ yahoo.co.jp>
>
> --
> Mattz <mattz @ yahoo.co.jp>
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://www.php.gr.jp/php/novice.php3
>



PHP-users メーリングリストの案内