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

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

WBOY
WBOYオリジナル
2016-06-13 12:23:331226ブラウズ

多次元配列を並べ替える一般的なアプローチは
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.04269016 名前
0.04267142 サイズ
2 番目の方法

0.001249 名前 0.00083924 サイズ 結果がすべてを物語っています。

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