多次元配列のソート

多次元配列を指定したキーでソートすることができる関数

キーを3つ指定できる

function array_sort_multi3($array, $key, $key2, $key3)
{
	for ($i = 0; $i < sizeof($array); $i++) {
		if(! empty($array[$i][$key][$key2][$key3])){
			$sort_values[$i] = $array[$i][$key][$key2][$key3];
		}else{
			$sort_values[$i] = $array[$i];
		}
	}
	asort ($sort_values);
	reset ($sort_values);
	while (list ($arr_keys, $arr_values) = each ($sort_values)) {
		$sorted_arr[] = $array[$arr_keys];
	}
	return $sorted_arr;
}

キーを2つ指定できる

function array_sort_multi2($array, $key,$key2)
{
	for ($i = 0; $i < sizeof($array); $i++) {
		if(! empty($array[$i][$key][$key2])){
			$sort_values[$i] = $array[$i][$key][$key2];
		}else{
			$sort_values[$i] = $array[$i];
		}
	}
	asort ($sort_values);
	reset ($sort_values);
	while (list ($arr_keys, $arr_values) = each ($sort_values)) {
		$sorted_arr[] = $array[$arr_keys];
	}
	return $sorted_arr;
}

キーを1つ指定できる

function array_sort($array, $key)
{
	for ($i = 0; $i < sizeof($array); $i++) {
		$sort_values[$i] = $array[$i][$key];
	}
	asort ($sort_values);
	reset ($sort_values);
	while (list ($arr_key, $arr_val) = each ($sort_values)) {
		$sorted_arr[] = $array[$arr_key];
	}
	return $sorted_arr;
}

参考

PHP: asort - Manual

多次元配列のソート(例題)

ソートしたい配列

$sample[0]['id'] = 4;
$sample[0]['id2'] = 3;
$sample[0]['id3'] = 4;
$sample[0]['name'] = 'dd';

$sample[1]['id'] = 4;
$sample[1]['id2'] = 3;
$sample[1]['id3'] = 3;
$sample[1]['name'] = 'cc';

$sample[2]['id'] = 4;
$sample[2]['id2'] = 3;
$sample[2]['id3'] = 5;
$sample[2]['name'] = 'aa';

$sample[3]['id'] = 3;
$sample[3]['id2'] = 1;
$sample[3]['id3'] = 2;
$sample[3]['name'] = 'bb';

$sample[4]['id'] = 4;
$sample[4]['id2'] = 4;
$sample[4]['id3'] = 5;
$sample[4]['name'] = 'ee';

実行する

$result = array_sort_multi3($sample, 'id', 'id2', 'id3');

結果

Array
(
    [0] => Array
        (
            [id] => 3
            [id2] => 1
            [id3] => 2
            [name] => bb
        )

    [1] => Array
        (
            [id] => 4
            [id2] => 3
            [id3] => 3
            [name] => cc
        )

    [2] => Array
        (
            [id] => 4
            [id2] => 3
            [id3] => 4
            [name] => dd
        )

    [3] => Array
        (
            [id] => 4
            [id2] => 3
            [id3] => 5
            [name] => aa
        )

    [4] => Array
        (
            [id] => 4
            [id2] => 4
            [id3] => 5
            [name] => ee
        )

)
Counter: 6393, today: 1, yesterday: 0

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2013-09-24 (火) 14:56:22 (1283d)