Heim >Backend-Entwicklung >PHP-Tutorial >php 数组函数 array_map、array_multisort多维数组排序实例

php 数组函数 array_map、array_multisort多维数组排序实例

WBOY
WBOYOriginal
2016-07-25 09:04:051246Durchsuche
  1. array_sort($arrFile, 1, 1);//根据name字段排序

  2. array_sort($arrFile, 3, 1);//根据size字段排序
  3. /*
  4. @records 要排序的数组
  5. @field要排序的字段,注意是数字
  6. @reverse正序还是反序
  7. */
  8. function _array_sort($records, $field, $reverse, $defaultSortField = 0)
  9. {
  10. $uniqueSortId = 0;
  11. $hash = array();
  12. $sortedRecords = array();
  13. $tempArr = array();
  14. $indexedArray = array();
  15. $recordArray = array();
  16. foreach($records as $record)

  17. {
  18. $uniqueSortId++;
  19. $recordStr = implode("|", $record)."|".$uniqueSortId;
  20. $recordArray[] = explode("|", $recordStr);
  21. }
  22. $primarySortIndex = count($record);

  23. $records = $recordArray;
  24. foreach($records as $record)

  25. {
  26. $hash[$record[$primarySortIndex]] = $record[$field];
  27. }
  28. uasort($hash, "strnatcasecmp");
  29. if($reverse)
  30. $hash = array_reverse($hash, true);
  31. $valueCount = array_count_values($hash);

  32. foreach($hash as $primaryKey => $value)

  33. {
  34. $indexedArray[] = $primaryKey;
  35. }
  36. $i = 0;

  37. foreach($hash as $primaryKey => $value)
  38. {
  39. $i++;
  40. if($valueCount[$value] > 1)
  41. {
  42. foreach($records as $record)
  43. {
  44. if($primaryKey == $record[$primarySortIndex])
  45. {
  46. $tempArr[$record[$defaultSortField]."__".$i] = $record;
  47. break;
  48. }
  49. }
  50. $index = array_search($primaryKey, $indexedArray);

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

  52. {
  53. uksort($tempArr, "strnatcasecmp");
  54. if($reverse)

  55. $tempArr = array_reverse($tempArr);
  56. foreach($tempArr as $newRecs)

  57. {
  58. $sortedRecords [] = $newRecs;
  59. }
  60. $tempArr = array();

  61. }
  62. }
  63. else
  64. {
  65. foreach($records as $record)
  66. {
  67. if($primaryKey == $record[$primarySortIndex])
  68. {
  69. $sortedRecords[] = $record;
  70. break;
  71. }
  72. }
  73. }
  74. }
  75. return $sortedRecords;
  76. }
复制代码

2、用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);

3、最终测试 以188条数据的数组进行测试, 排序50次求平均值. 方式1: 0.04269016 name 0.04267142 size

方式2: 0.001249 name 0.00083924 size

>>> 更多内容,请查看 php数组排序方法大全



Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn