多次元配列を並べ替える一般的な方法は次のとおりです。
1 並べ替えられたデータを取得し、配列 $arrSort に配置します。キー インデックスは、一意性を確保するために並べ替える配列のインデックスです。
2 並べ替え関数 sort を使用して、 $arrSort ソートを実行します。
3 $arrSort を走査し、インデックスに従って多次元配列のデータを取得し、ソートされた多次元配列を再構築します。
(
[0] => 配列
(
[リンク] = > テスト
[名前] => test.rpm
[タイプ] => ファイル
[サイズ] => 988.9k
[mtime] => 1185160178)
....
)
I 久しぶりです。 以前オンラインで見つけたソート関数は効率的ではありませんが、非常に実用的です。 コードは次のとおりです。
_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);
{
$indexedArray[] = $primaryKey; $i = 0;
{
$i++; ($valueCount[$value] > 1)
{
foreach($record として)
{
if($primaryKey == $record[$primarySortIndex])
{
}
}
$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;
}
}
}
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) に注意してください。