ホームページ >バックエンド開発 >PHPチュートリアル >PHP 配列関数 array_map、array_multisort 多次元配列のソート例

PHP 配列関数 array_map、array_multisort 多次元配列のソート例

WBOY
WBOYオリジナル
2016-07-25 09:04:051246ブラウズ
  1. array_sort($arrFile, 1, 1);//名前フィールドに従って並べ替えます
  2. array_sort($arrFile, 3, 1);//名前フィールドに従って並べ替えますsize field
  3. / *
  4. @records ソート対象の配列
  5. @field ソート対象のフィールド、数値かどうかに注意
  6. @逆正負の順序
  7. */
  8. function _array_sort($records, $field, $reverse , $defaultSortField = 0)
  9. {
  10. $uniqueSortId = 0;
  11. $sortedRecords = array();
  12. $indexedArray = array(); array();
  13. foreach($records として $record)

  14. {
  15. $uniqueSortId++;
  16. $recordStr = implode("|", $record)."|".$uniqueSortId; $recordArray[] =explode(" |", $recordStr);
  17. }

  18. $primarySortIndex = count($record);

  19. $records = $recordArray;

  20. < ;p>foreach($records as $record)
  21. {
  22. $hash[$record[$primarySortIndex]] = $record[$field];
  23. }
  24. uasort($hash, "strnatcasecmp"); )
  25. $hash = array_reverse($ hash, true);

  26. $valueCount = array_count_values($hash);

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

  28. {
  29. $indexedArray[] = $primaryKey
  30. }

  31. $i = 0;

  32. foreach($hash as $primaryKey => $value) $i++;
  33. if($valueCount [$value] > 1)
  34. {
  35. foreach($records as $record)
  36. {
  37. if($primaryKey == $record[$primarySortIndex])
  38. {
  39. $tempArr[$ Record[$defaultSortField]."__ ".$i] = $record;
  40. }
  41. }

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

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

  44. {
  45. uksort($tempArr, "strnatcasecmp ");

  46. if($reverse)

  47. $tempArr = array_reverse($tempArr);

  48. foreach($tempArr as $newRecs)

  49. {
  50. $ sortedRecords [] = $newRecs
  51. }

  52. $tempArr = array();

  53. }
  54. }
  55. else
  56. {
  57. foreach($record として)
  58. {
  59. if($primaryKey == $record[$primarySortIndex] )
  60. {
  61. $sortedRecords[] = $record;
  62. }
  63. }
  64. }
  65. return $sortedRecords}

  66. 2. array_map とarray_mutisort を使用して並べ替えます。 array_mutisor は、前の関数とは比較にならない、複数の値に基づいて 2 番目または 3 番目の並べ替えを実行することもできます。 array_map を使用して並べ替える配列を取得します $arrField = array_map(create_function('$n', 'return $n["size"];'), $arrFile); //array_mutisort を使用して並べ替えます $array_multisort($arrField, SORT_DESC, $arrFile);
  67. 3. 最終テスト 188 個のデータの配列を使用してテストし、50 回並べ替えて平均を見つけます。 方法 1: 0.04269016 名前 0.04267142サイズ
  68. 方法 2: 0.001249 名前 0.00083924 サイズ
>>> 詳細については、PHP 配列ソートメソッドの完全なリストをご覧ください

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。