多次元配列のソートを行う平成30年 10月 28日 作成

00113

概略

多次元配列の特定キーにてソートしたい場面がでてきた。

多次元配列の知識を習得、ソートができるようにする。

手段

「array_multisort()」関数及び「foreach()」関数にて実現可能。

実装方法

構文

array_multisort(ソートしたい配列, 並び順(昇・降順), ソート方法, ソートしたい配列);

$data変数に下記の配列データあるとして、id順の昇順にてソートする方法を下記にサンプルコードとして記述。


配列データー

<?php
	Array
	(
	[0] => Array
		(
		[id] => 3
		[fruits] => banana
		[price] => 100
		)
	[1] => Array
		(
		[id] => 1
		[fruits] => strawberry
		[price] => 300
		)
	[2] => Array
		(
		[id] => 4
		[fruits] => apple
		[price] => 80
		)
	[3] => Array
		(
		[id] => 2
		[fruits] => orange
		[price] => 80
		)
	)
?>

「foreach関数」を使用し、ソートしたいkeyで配列を作って「array_multisort関数」へ適切にデータを渡す仕組み。


php

<?php
	// ソートしたい配列を取り出す為の前準備
	foreach($data as $key => $value){
		$result_id[$key] = $value['id'];
	}
	// 降順の場合は「SORT_ASC」を「SORT_DESC」 $dataを最後のパラメータとして渡し、同じキーでソート
	array_multisort($result_id, SORT_ASC, $data);
?>

結果

<?php
	Array
	(
	[0] => Array
		(
		[id] => 1
		[fruits] => strawberry
		[price] => 300
		)
	[1] => Array
		(
		[id] => 2
		[fruits] => orange
		[price] => 80
		)
	[2] => Array
		(
		[id] => 3
		[fruits] => banana
		[price] => 100
		)
	[3] => Array
		(
		[id] => 4
		[fruits] => apple
		[price] => 80
		)
	)
?>

priceキーでソート後にidキーでソートする等の複数条件でソートしたい場合は下記。


php

<?php
	foreach($data as $key => $value){
		$result_id[$key] = $value['id'];
		$result_price[$key] = $value['price'];
	}
	array_multisort($result_price, SORT_ASC, $result_id, SORT_ASC, $data);
?>

結果

<?php
	Array
	(
	[0] => Array
		(
		[id] => 2
		[fruits] => orange
		[price] => 80
		)
	[1] => Array
		(
		[id] => 4
		[fruits] => apple
		[price] => 80
		)
	[2] => Array
		(
		[id] => 3
		[fruits] => banana
		[price] => 100
		)
	[3] => Array
		(
		[id] => 1
		[fruits] => strawberry
		[price] => 300
		)
	)
?>

考察

慣れの問題もあるが少し難しく感じる。

最後までお読み下さり ありがとうございました。記事はここ迄です。

尚、本記事は作成から「5年以上」経過しています。

記事作成当時と現在の状況等により内容が適切でない場合があります。また、リンク切れが生じている場合もあります事を予めご了承下さい。

お気に入りに登録しますとお気に入り記事を一元管理でき、再度閲覧したい場合等 容易に記事を探し出す事ができますのでご活用下さい。

下段にはコメントを掲載しております。

広告バナー

コメント

頂いたコメントを下記に掲載しております。更に下部にはコメント投稿フォームを設けております。

注意事項を確認・了承した上、コメント投稿お願いいたします。

注意事項に該当するコメントにつきましては、事前告知なしに投稿したコメントの削除を行う場合があります。

予めご了承下さい。

  • 記事内容と無関係なコメント
  • 公序良俗に反するコメント
  • 個人情報や法令違反を含むコメント
  • その他、管理者が不適切と判断したコメント

現在 頂いているコメントはありません

返信先(コメント管理番号)コメントに対し返信する場合のみ
お名前・ハンドルネーム2~32文字内で入力下さい
メールアドレス公開される事はありません
電話番号半角数字+ハイフンで入力下さい
コメント全角500文字内で入力下さい