ホームページ  >  記事  >  php教程  >  php array_map array_multisort は多次元配列のソートを効率的に処理します

php array_map array_multisort は多次元配列のソートを効率的に処理します

黄舟
黄舟オリジナル
2016-12-14 13:11:431353ブラウズ

多次元配列を並べ替える一般的な方法は次のとおりです。
1 並べ替えられたデータを取得し、配列 $arrSort に配置します。キー インデックスは、一意性を確保するために並べ替える配列のインデックスです。
2 並べ替え関数 sort を使用して、 $arrSort ソートを実行します。
3 $arrSort を走査し、インデックスに従って多次元配列のデータを取得し、ソートされた多次元配列を再構築します。

Array

(
[0] => 配列
(
[リンク] = > テスト
[名前] => test.rpm
[タイプ] => ファイル
[サイズ] => 988.9k
[mtime] => 1185160178)
....
)

I 久しぶりです。 以前オンラインで見つけたソート関数は効率的ではありませんが、非常に実用的です。 コードは次のとおりです。

_array_sort($arrFile, 1, 1); // に従ってソートします。名前フィールド

_array_sort($arrFile, 3, 1); // サイズフィールドに従ってソートします

/*

@records ソートされる配列
@field ソートされるフィールド、数値であるかどうかに注意してください
@逆順または逆順
*/
function _array_sort($records, $field, $reverse , $defaultSortField = 0)
{
$uniqueSortId = 0;
$sortedRecords = array();
$tempArr = array();
$indexedArray = array();

foreach($record として)
{
$uniqueSortId++; $record)."|".$uniqueSortId;
$recordArray[] =explode(" |", $recordStr);
$records = $recordArray; ($record を $record として)

{

$hash[$record[$primarySortIndex]] = $record[$field]
}
uasort($hash, "strnatcasecmp"); = array_reverse($hash, true);

$valueCount = array_count_values($hash);

foreach($hash as $primaryKey => $value)

{
$indexedArray[] = $primaryKey; $i = 0;

foreach($primaryKey => $value)

{
$i++; ($valueCount[$value] > 1)
{
foreach($record として)
{
if($primaryKey == $record[$primarySortIndex])
{

$tempArr [$record[$defaultSortField]."__".$i] = $record

}

}


$index; = array_search($primaryKey, $indexedArray);

if(($i == count ($records)) || ($value != $hash[$indexedArray[$index+1]]))

{

uksort ($tempArr, "strnatcasecmp");

if($reverse)
$tempArr = array_reverse($tempArr);

foreach($tempArr as $newRecs)
{
$sortedRecords [] = $newRecs;
$tempArr = array();
}
}
else
{
foreach($ records as $record)

{

if($primaryKey == $record[$primarySortIndex])

{

$sortedRecords[] = $ Record;
break;
}

}

}
}

return $sortedRecords;


II 並べ替えには array_map と array_mutisor を使用します
array_mutisor は、前の関数とは比較にならない、複数の値に基づいて 2 番目または 3 番目の並べ替えも実行できます。

コードは次のとおりです:

array_map を使用して配列を取得します
$arrField = array_function('$n', 'return $n["size"];'), $arrFile); // array_mutisor を使用して並べ替えます
$array_multisort($arrField, SORT_DESC, $arrFile);

III 最終テスト
188 個のデータの配列を使用してテストし、平均を見つけるために 50 回並べ替えます
最初の方法
0.04269016 name
0.04267142サイズ
2 番目の方法
0.001249 名前
0.00083924 サイズ

お読みいただきありがとうございます。さらに関連したコンテンツを入手したい場合は、PHP 中国語 Web サイト (www.php.cn) に注意してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。