muv-luv(alternative) php array_map array_multisort は多次元配列のソートを効率的に処理します

WBOY
リリース: 2016-07-29 08:40:02
オリジナル
910 人が閲覧しました

多次元配列を並べ替える一般的なアプローチは、
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($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 サイズ
結果は自明です。

以上、muv-luv(alternative) の内容を含め、多次元配列のソートを効率的に行うための muv-luv(alternative) php array_map array_multisort を紹介しました。PHP チュートリアルに興味のある友人の参考になれば幸いです。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート