ホームページ  >  記事  >  バックエンド開発  >  php array_map array_multisort 多次元配列のソートを効率的に処理する_PHP チュートリアル

php array_map array_multisort 多次元配列のソートを効率的に処理する_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:46:02907ブラウズ

多次元配列を並べ替える一般的なアプローチは、
1 並べ替えられたデータを取得し、配列 $arrSort に入れることです。キー インデックスは、一意性を保証するために並べ替えられる配列のインデックスです。
2 並べ替え関数 sort を使用して、 sort $arrSort .
3 $arrSort を走査し、そのインデックスに従って多次元配列のデータを取得し、ソートされた多次元配列を再構築します

コードは次のとおりです。 配列 ( [0] => 配列 (
[リンク] => テスト
[名前] => test.rpm
[タイプ] => ファイル
[サイズ] => 988.9k
[mtime] = > 1185160178)
... .
)


昔、インターネットでソート機能を見つけました。効率的ではありませんが、非常に実用的です



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


_array_sort($arrFile, 1, 1);/ /名前フィールドに従って並べ替える
_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($record としての $record)
{
$hash[$record[$primarySortIndex]] = $record[$field];
uasort($hash, "strnatcasecmp");
if($reverse)
$hash = array_reverse($ hash, true);

$valueCount = array_count_values($hash); => $value)
{
$indexedArray[] = $primaryKey ;

$i = 0 ;
{
$i++; valueCount[$value] > 1)
{
foreach($records as $record)
{
if( $primaryKey == $record[$primarySortIndex])
{
$tempArr[$record[$defaultSortField]。" __".$i] = $record;
break;
}
}

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

if(($i == count($records)) || ($値 != $hash[$indexedArray[$index+1]]))
{
uksort($tempArr, "strnatcasecmp");

if($reverse)
$tempArr = array_reverse($tempArr); ($tempArr as $newRecs)
{
$sortedRecords [] = $newRecs;
}
$tempArr = array();
}
}
else
{
foreach($record として)
{
if ($ primerykey == $ record [$ primarysortindex] {
$ sorted records; sort
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 サイズ

結果がすべてを物語ります



http://www.bkjia.com/PHPjc/320223.html

www.bkjia.com

tru​​e
http://www.bkjia.com/PHPjc/320223.html

技術記事
多次元配列を並べ替える一般的なアプローチは次のとおりです。 1. 並べ替えられたデータを取得し、それを配列 $arrSort に置きます。キー インデックスは並べ替えられる配列のインデックスであり、一意性が保証されます。 2. 並べ替え関数を使用します。 .
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。