Rumah php教程 PHP开发 php array_map array_multisort 高效处理多维数组排序

php array_map array_multisort 高效处理多维数组排序

Dec 14, 2016 pm 01:11 PM

对多维数组排序,通用的作法是
1 获取利用排序的数据并且将其放入数组$arrSort. 其中键索引为要排序数组的索引,保证唯一性 
2 利用排序函数sort等对$arrSort进行排序. 
3 遍历$arrSort, 根据其索引,获取多维数组的数据,重新构造排序后的多维数组.

代码如下:
Array 

[0] => Array 

[link] => test 
[name] => test.rpm 
[type] => file 
[size] => 988.9k 
[mtime] => 1185160178) 
.... 
)

I 很久以前在网上找到的一个排序函数,谈不上高效,但很实用

代码如下:
_array_sort($arrFile, 1, 1);//根据name字段排序 
_array_sort($arrFile, 3, 1);//根据size字段排序 
/* 
@records 要排序的数组 
@field要排序的字段,注意是数字 
@reverse正序还是反序 
*/ 
function _array_sort($records, $field, $reverse, $defaultSortField = 0) 

$uniqueSortId = 0; 
$hash = array(); 
$sortedRecords = array(); 
$tempArr = array(); 
$indexedArray = array(); 
$recordArray = array();

foreach($records as $record) 

$uniqueSortId++; 
$recordStr = implode("|", $record)."|".$uniqueSortId; 
$recordArray[] = explode("|", $recordStr); 
}

$primarySortIndex = count($record); 
$records = $recordArray;

foreach($records as $record) 

$hash[$record[$primarySortIndex]] = $record[$field]; 

uasort($hash, "strnatcasecmp"); 
if($reverse) 
$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($records as $record) 

if($primaryKey == $record[$primarySortIndex]) 

$tempArr[$record[$defaultSortField]."__".$i] = $record; 
break; 

}

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

if(($i == count($records)) || ($value != $hash[$indexedArray[$index+1]])) 

uksort($tempArr, "strnatcasecmp");

if($reverse) 
$tempArr = array_reverse($tempArr);

foreach($tempArr as $newRecs) 

$sortedRecords [] = $newRecs; 
}

$tempArr = array(); 


else 

foreach($records as $record) 

if($primaryKey == $record[$primarySortIndex]) 

$sortedRecords[] = $record; 
break; 




return $sortedRecords; 
}

II 用array_map和array_mutisort来排序 
array_mutisort还可以根据多个值来进行二次或者三次排序,这是上一个函数所不能比的.

代码如下:
利用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 name 
0.04267142 size 
第二种方式 
0.001249 name 
0.00083924 size

感谢您的阅读,想要获取更多相关内容请关注PHP中文网(www.php.cn)!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)