我如何用数组中指定的字母有效地对具有百万个值的数组进行排序,而又不会浪费时间.
$letters = array("а","б", "в", "г", "ғ", "д", "е", "ё", "ҷ", "ж", "з", "и", "ӣ", "й", "к", "қ", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ӯ", "ф", "х", "ҳ", "ч", "ш", "ъ", "э", "ю", "я");
通过特定键对数组排序的简单函数.维护索引关联.此函数还对数组进行排序,但不是按字母排序,而是按英语字母排序(在英语字母中效果更好).
<?phpfunction array_sort($array, $on, $order=SORT_ASC){ $new_array = array(); $sortable_array = array(); if (count($array) > 0) { foreach ($array as $k => $v) { if (is_array($v)) { foreach ($v as $k2 => $v2) { if ($k2 == $on) { $sortable_array[$k] = $v2; } } } else { $sortable_array[$k] = $v; } } switch ($order) { case SORT_ASC: asort($sortable_array); break; case SORT_DESC: arsort($sortable_array); break; } foreach ($sortable_array as $k => $v) { $new_array[$k] = $array[$k]; } } return $new_array;}$people = array( 12345 => array( 'id' => 12345, 'first_name' => 'Joe', 'surname' => 'Bloggs', 'age' => 23, 'sex' => 'm' ), 12346 => array( 'id' => 12346, 'first_name' => 'Adam', 'surname' => 'Smith', 'age' => 18, 'sex' => 'm' ), 12347 => array( 'id' => 12347, 'first_name' => 'Amy', 'surname' => 'Jones', 'age' => 21, 'sex' => 'f' ));print_r(array_sort($people, 'age', SORT_DESC)); // Sort by oldest firstprint_r(array_sort($people, 'surname', SORT_ASC)); // Sort by surname/*Array( [12345] => Array ( [id] => 12345 [first_name] => Joe [surname] => Bloggs [age] => 23 [sex] => m ) [12347] => Array ( [id] => 12347 [first_name] => Amy [surname] => Jones [age] => 21 [sex] => f ) [12346] => Array ( [id] => 12346 [first_name] => Adam [surname] => Smith [age] => 18 [sex] => m ))Array( [12345] => Array ( [id] => 12345 [first_name] => Joe [surname] => Bloggs [age] => 23 [sex] => m ) [12347] => Array ( [id] => 12347 [first_name] => Amy [surname] => Jones [age] => 21 [sex] => f ) [12346] => Array ( [id] => 12346 [first_name] => Adam [surname] => Smith [age] => 18 [sex] => m ))*/?>
另一个按值排序的变体:
<?php $data = array("US" => "United States", "IN" => "India", "DE" => "Germany", "ES" => "Spain");asort($data); print_r($data);/*Array ([DE] => Germany[IN] => India[ES] => Spain[US] => United States) */
?>
我的示例数组用于排序:
<?phpArray( [0] => дувоздаҳҳазорсоларо [2] => мусовиулқувваро [3] => фарҳангшиносону [6] => илоҳиётшиносони [7] => сарнавиштпазирӣ [14] => сангнабиштаҳое [15] => илоҳиётшиносон [16] => музаффариятҳои [18] => минтақатулбурҷ [20] => фарҳангномаҳои [21] => парастишгоҳҳое [22] => кишваркушоиҳои [23] => парастишгоҳҳои [24] => фарҳангшиносон [26] => таҷъирнопазир [29] => илҳодшиносони [30] => сангнабиштаҳо [31] => сангнабиштҳои [32] => гумроҳкунанда [34] => байнаннаҳрайн [35] => наанҷомидааст [38] => парҳезкоронаи [39] => меҳрпарастист [42] => дареҷухвазата [45] => лашкаркашиҳои [47] => мовароуттабиӣ [49] => дастнахӯрдагӣ [51] => шаҳватпарастӣ [53] => аввалиндараҷа [56] => меҳрпарастиву [57] => ҷаҳоншиносиро [58] => меҳрпарастиро [60] => зарвонпарастӣ [62] => ҳастишиносиву [63] => муҳоҷираташон [65] => пажӯҳандагон [66] => бавуҷудомада [67] => ситорашиносӣ [72] => нӯҳҳазорсола [74] => аҳуромаздост [75] => ҷаҳонишиносӣ);?>
此结果未按我的顶点排序从数组排序:
<?php $array = array ( "ӯктамҷон", "ғайрат", "маъруфҷон", "рустам", "карим", "ҳурматой", "тоҷикӣ", "забони тоҷикӣ", "адолат" ); echo "<pre>"; print_r($array); echo "</pre>"; /* Array ( [0] => ӯктамҷон [1] => ғайрат [2] => маъруфҷон [3] => рустам [4] => карим [5] => ҳурматой [6] => тоҷикӣ [7] => забони тоҷикӣ [8] => адолат ) */ setlocale(LC_ALL, "tg-Cyrl-TJ"); sort($array, SORT_LOCALE_STRING); echo "<pre>"; print_r($array); echo "</pre>"; /* Array ( [0] => адолат [1] => забони тоҷикӣ [2] => карим [3] => маъруфҷон [4] => тоҷикӣ [5] => рустам [6] => ғайрат [7] => ҳурматой [8] => ӯктамҷон ) */ /* Result must be: Array ( [0] => адолат [1] => ғайрат [2] => забони тоҷикӣ [3] => карим [4] => маъруфҷон [5] => рустам [6] => тоҷикӣ [7] => ӯктамҷон [8] => ҳурматой ) */?>
解决方法:
您可以使用此函数按任何字符顺序对数组值进行排序,这需要作为第二个参数提供:
function customSort(&$arr, $charOrder) { $mappedChar = $charOrder; sort($mappedChar); $mapping = array_combine($charOrder, $mappedChar); foreach($arr as $str) { $mapped[] = strtr($str, $mapping); } return array_multisort($mapped, $arr);}
就像标准的PHP函数一样,它对数组进行原位排序.
这是您将如何使用它:
$charOrder = ["а","б", "в", "г", "ғ", "д", "е", "ё", "ҷ", "ж", "з", "и", "ӣ", "й", "к", "қ", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ӯ", "ф", "х", "ҳ", "ч", "ш", "ъ", "э", "ю", "я"];// Sample unsorted array$arr = [ "ӯктамҷон", "ғайрат", "маъруфҷон", "рустам", "карим", "ҳурматой", "тоҷикӣ", "забони тоҷикӣ", "адолат" ];customSort($arr, $charOrder);
运行上面的示例后,$arr将具有以下内容:
array ( 'адолат', 'ғайрат', 'забони тоҷикӣ', 'карим', 'маъруфҷон', 'рустам', 'тоҷикӣ', 'ӯктамҷон', 'ҳурматой',)
来源:https://www.icode9.com/content-1-521001.html
联系客服