PHPの配列の並び替えについての質問です。


[0]array('商品名' => 'hogehoge','金額' => 1000)
[1]array('商品名' => 'gehogeho','金額' => 100)
[2]array('商品名' => 'aheahe','金額' => 10000)
[3]array('商品名' => 'heahea','金額' => 5000)

こんな感じで2個のデータを持つ配列が複数入っている配列があります。
これを金額順に並べるうまい方法はありますか?
asort,ksortなどもやってみましたがダメでしたし、ちょっと違う感じです。

この場合ですと、次のようになって欲しいのです。

[0]array('商品名' => 'aheahe','金額' => 10000)
[1]array('商品名' => 'heahea','金額' => 5000)
[2]array('商品名' => 'hogehoge','金額' => 1000)
[3]array('商品名' => 'gehogeho','金額' => 100)

どなたかアドバイスをお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2008/02/07 23:54:27
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:hatettyo No.2

回答回数23ベストアンサー獲得回数2

ポイント50pt

多次元配列のソートはarray_multisortという関数を使います。

昇順であればSORT_ASCです。

<?php
	$hoge1 = array('name'=>'hogehoge','price'=>1000);
	$hoge2 = array('name'=>'gehogeho','price'=>100);
	$hoge3 = array('name'=>'aheahe','price'=>10000);
	$hoge4 = array('name'=>'heahea','price'=>5000);

	$list = array($hoge1,$hoge2,$hoge3,$hoge4);

$price = array();

foreach($list as $value){
	$price[] = $value['price'];
}
array_multisort($price,SORT_DESC,SORT_NUMERIC, $list);
?>


id:southgate_01

コメントありがとうございます。

出来ました。


http://zapanet.info/phpdoc/function.array-multisort.html

こちらも参考になりましたのでメモしておきます。

2008/02/07 23:54:07

その他の回答1件)

id:GoldenDawn No.1

回答回数426ベストアンサー獲得回数81

ポイント35pt
$a = array() ;
$a[0] = array('商品名' => 'hogehoge','金額' => 1000) ;
$a[1] = array('商品名' => 'gehogeho','金額' => 100) ;
$a[2] = array('商品名' => 'aheahe','金額' => 10000) ;
$a[3] = array('商品名' => 'heahea','金額' => 5000) ;

uasort($a,
       create_function(
         '$a, $b',
         'return $a["金額"] == $b["金額"] ? 0 : ($a["金額"] > $b["金額"] ? -1 : 1) ; '
       )
      ) ;

print_r($a) ;

こんな感じ?

id:southgate_01

コメントありがとうございます。

申し訳ありません、ちょっと書き方が高度で理解できませんでした。

array_multisort()で出来ました。

2008/02/07 23:53:41
id:hatettyo No.2

回答回数23ベストアンサー獲得回数2ここでベストアンサー

ポイント50pt

多次元配列のソートはarray_multisortという関数を使います。

昇順であればSORT_ASCです。

<?php
	$hoge1 = array('name'=>'hogehoge','price'=>1000);
	$hoge2 = array('name'=>'gehogeho','price'=>100);
	$hoge3 = array('name'=>'aheahe','price'=>10000);
	$hoge4 = array('name'=>'heahea','price'=>5000);

	$list = array($hoge1,$hoge2,$hoge3,$hoge4);

$price = array();

foreach($list as $value){
	$price[] = $value['price'];
}
array_multisort($price,SORT_DESC,SORT_NUMERIC, $list);
?>


id:southgate_01

コメントありがとうございます。

出来ました。


http://zapanet.info/phpdoc/function.array-multisort.html

こちらも参考になりましたのでメモしておきます。

2008/02/07 23:54:07

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません