天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

php array_map array_multisort 高效處理多維數組排序

對多維數組排序,通用的作法是
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技術php array_map array_multisort 高效處理多維數組排序,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 日本久久久免费高清 | 女教师杨雪的性荡生活 | 诱人的秘书BD在线观看 | h版动漫在线播放的网站 | 97人妻无码AV碰碰视频 | 男生扒开美女尿口戳戳 | 国产毛A片久久久久久无码 国产毛A片啊久久久久久A | 亚欧免费观看在线观看更新 | 在线欧美 精品 第1页 | 久久精品一区二区三区资源网 | 欧美日韩中文国产一区发布 | 成人午夜精品久久久久久久秋霞 | 精品国产乱码久久久久久软件 | 国产AV一区二区三区日韩 | 一区二区三区国产亚洲网站 | 91麻豆精品一二三区在线 | 精品免费久久久久久成人影院 | 无人区大片中文字幕在线 | 熟女人妻水多爽中文字幕 | 国产午夜婷婷精品无码A片 国产午夜视频在永久在线观看 | 午夜精品久久久内射近拍高清 | 热久久伊大人香蕉网老师 | 日本无码人妻精品一区二区视频 | 国产精品美女久久久久浪潮AV | 四虎影视国产精品亚洲精品 | 极品少妇高潮啪啪无码吴梦 | aaa在线观看视频高清视频 | 免费精品一区二区三区AA片 | 最近的中文字幕2019国语 | 国产精品AV视频一二三区 | 受被攻做到腿发颤高h文 | 最懂男人心论坛 | 91桃色污无限免费看 | 国产中文视频无码成人精品 | 国产在线精品视频免费观看 | 日本69xxxx | 国产女人乱人伦精品一区二区 | 欧美黄色第一页 | 免费国产福利 | 4hu四虎免费影院www | 男女午夜性爽快免费视频不卡 |