對多維數組排序,通用的作法是
1 獲取利用排序的資料並且將其放入數組$arrSort. 其中鍵索引為要排序數組的索引,保證唯一性
2 利用排序函數sort等對$arrSort進行排序.
3 遍歷$arrSort, 依其索引,取得多維數組的資料,重新建構排序後的多維數組.
程式碼如下:
Array
(
[0] => Arlink> test
[name] => test.rpm
[type] => file
[size] => 988.9k
[mtime] => 1185160178)
.
. 排序函數,談不上高效率,但很實用
程式碼如下:
_array_sort($arrFile, 3, 1);//依照size欄位排序
/*@records 要排序的陣列
@field要排序的欄位,注意是數字
@reverse正序還是反序
*/
function _array_sort($records, $ielfield, $reverse
function _array_sort($records, $ielfield, $reverses, $.
{
$uniqueSortId = 0;
$hash = array();
$sortedRecords = array();
$tempArr = array();
$indexed foreach($records as $record)
{
$uniqueSortId++;
$recordStr = implode("|", $record)."|".$uniqueSortId;
$recordArray[] = explocord"| ;
$primarySortIndex = count($record);
$records = $recordArray;
foreach($records as $record)
{Š
{freum
for]$records as $record)
}
uasort($hash, "strnatcasecmp");
if($reverse)
$hash = array_reverse($hash, true);
$valueCount = /arra as $primaryKey => $value)
{
}
$i = 0;
foreach($hash as $primary/ $ $valueCount[$value] > 1)
{
foreach($records as $record)
if($primaryKey == $record[$primarySortIndex])com __".$i] = $record;
break;
}
}
$index = array_search($primaryKey, $indexedArray);
if(($i == count($records)) ||($record$ value != $hash[$indexedArray[$index+1]]))
{
uksort($tempArr, "strnatcasecmp");
if($reverse)
$forArr = array_reverse($Arry); ($tempArr as $newRecs)
{
}
$tempArr = array();
}
if ($primaryKey == $record[$primarySortIndex])
$sortedRecords[] = $record;
break;
}
}
} 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 最終測試以 結資料的陣列進行測試, 排序50次求平均值.
第一種方式
0.04269016 name
0.04267142 size
第二種方式
0.001249 name
第二種方式
0.001249 name.內容請關注PHP中文網(m.sbmmt.com)!