多次元配列を並べ替える一般的なアプローチは
1 です。並べ替えられたデータを取得し、それを配列 $arrSort に置き、一意性を確保します。
2 を使用します。ソート関数 sort など。 $arrSort はソートされます。
3 $arrSort を走査し、そのインデックスに従って多次元配列のデータを取得し、ソートされた多次元配列を再構築します。 🎜>
コードをコピー
コードは次のとおりです: 配列
([0] => 配列
(
[リンク] => テスト
[名前] => test.rpm
[タイプ] => ファイル
[サイズ] => 988.9k
[mtime] => 1185160178)
....
)
昔、インターネットで並べ替え機能を見つけました。効率的ではありませんが、非常に実用的です
コードは次のとおりです:_array_sort($arrFile, 1, 1);//名前フィールドに従って並べ替えます
_array_sort( $arrFile, 3, 1);//サイズに応じて並べ替える field/*
@records 並べ替える配列
@field 並べ替えるフィールド、数値かどうかに注意してください
@順方向または逆方向の順序を反転します
*/
function _array_sort($records, $field, $reverse, $defaultSortField = 0)
{
$uniqueSortId = 0;配列();
$sortedRecords = 配列();
$indexedArray = 配列(); foreach($records as $record)
{
$uniqueSortId;
$recordStr = implode("| ", $record)."|".$uniqueSortId[] = 爆発("|", $recordStr);
$primarySortIndex = count($record);
$records = $recordArray($records as $record; )
{
$hash[$record[$primarySortIndex]] = $record[$field];
}
uasort($hash, "strnatcasecmp"); )
$hash = array_reverse($hash, true);
$valueCount = array_count_values($hash );
foreach($hash as $primaryKey => $value)
{
$indexedArray[] = $primaryKey;
}
$i = 0 ;
foreach($hash as $primaryKey => $value)
{
$i ;
if($valueCount[$value] > 1)
{
foreach ($record としての $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); ($tempArr として $newRecs)
{
$sortedRecords [] = $newRecs;
}
$tempArr = array()
}
else
{
foreach($records as $record)
{
if($primaryKey = = $record[$primarySortIndex])
{
$sortedRecords[] = $record ;
break;
}
}
}
}
return $sortedRecords ;
}
II を使用して
array_mutisor は、前の関数とは比較にならないほど、複数の値に基づいて 2 回または 3 回ソートすることもできます。
コードをコピー
コードは次のとおりです。 🎜>
array_map を使用して配列を並べ替えます
$arrField = array_map(create_function(' $n', 'return $n["size"];'), $arrFile); 🎜>//array_mutisor を使用して並べ替えます
$array_multisort($arrField, SORT_DESC, $arrFile);
III 最終テスト
188 データの配列を使用してテストし、50 回並べ替えます
0.001249 名前 0.00083924 サイズ 結果がすべてを物語っています。