多次元配列を並べ替える一般的なアプローチは、
1 並べ替えられたデータを取得し、配列 $arrSort に入れることです。キー インデックスは、一意性を保証するために並べ替えられる配列のインデックスです。
2 並べ替え関数 sort を使用して、 sort $arrSort .
3 $arrSort を走査し、そのインデックスに従って多次元配列のデータを取得し、ソートされた多次元配列を再構築します
コードは次のとおりです。 配列 ( [0] => 配列 (
[リンク] => テスト[名前] => test.rpm
[タイプ] => ファイル
[サイズ] => 988.9k
[mtime] = > 1185160178)
... .
)
昔、インターネットでソート機能を見つけました。効率的ではありませんが、非常に実用的です
コードは次のとおりです。
_array_sort($arrFile, 3, 1); //サイズフィールドに従って並べ替える /* @records 配列besort @field ソートするフィールド、数値であるか注意してください @reverse forward or reverse order 順序
*/function _array_sort($records, $field, $reverse, $defaultSortField = 0)
{
$uniqueSortId = 0;
$sortedRecords = array();
$indexedArray = array(); $record)
{
$uniqueSortId++;
$recordStr = implode("|", $record)." |".$recordArray[] =explode("|", $recordStr); $primarySortIndex = count($record);
$records = $recordArray;
foreach($records として $record)
{
$hash[$record[$primarySortIndex]] = $record[$field]; ($hash, "strnatcasecmp");
if($reverse)
$hash = array_reverse($hash, true );
$valueCount = array_count_values($hash); )
{
$indexedArray[] = $primaryKey
}
$i = 0;
foreach($hash as $primaryKey => $value)
{
$i++; ; 1)
{
foreach($records as $record)
{
if($primaryKey == $record [$primarySortIndex])
{
$tempArr[$record[$defaultSortField]."__".$i] = $record;
}
}
$index = array_search($primaryKey, $indexedArray)
if(($i == count($records)) || ($value != $indexedArray [$index+1]]))
{
uksort($tempArr, "strnatcasecmp");
if( $reverse)
$tempArr = array_reverse($tempArr)
{
$sortedRecords [] = $newRecs;
$tempArr = array();
}
}
else
{
foreach($record として)
{
if($primaryKey == $record[$primarySortIndex] )
{
$sortedRecords[] = $record;
}
}
}
}
return $sortedRecords
II array_map と array_mutisor を使用して 2 番目または 3 番目の並べ替えも実行できますベースの前の関数とは比較にならない、複数の値に対応します
コードをコピー
コードは次のようになります:
配列を並べ替えるには array_map を使用します
$arrField = array_map(create_function('$n', ' return $n["size"];'), $arrFile);
//array_mutisort を使用して並べ替えを実行します
$array_multisort($arrField, SORT_DESC, $arrFile);
III 最終テスト 188 個の配列を使用してテストしますデータを 50 回並べ替えて平均を見つけます
最初の方法
0.04269016 名前
0.04267142
いいえ 2 つの方法
0.001249 名前
0.00083924 サイズ
結果は自明です。