我如何用數(shù)組中指定的字母有效地對(duì)具有百萬(wàn)個(gè)值的數(shù)組進(jìn)行排序,而又不會(huì)浪費(fèi)時(shí)間.
$letters = array("а","б", "в", "г", "?", "д", "е", "ё", "?", "ж", "з", "и", "?", "й", "к", "?", "л", "м", "н", "о", "п", "р", "с", "т", "у", "?", "ф", "х", "?", "ч", "ш", "ъ", "э", "ю", "я");
通過(guò)特定鍵對(duì)數(shù)組排序的簡(jiǎn)單函數(shù).維護(hù)索引關(guān)聯(lián).此函數(shù)還對(duì)數(shù)組進(jìn)行排序,但不是按字母排序,而是按英語(yǔ)字母排序(在英語(yǔ)字母中效果更好).
<?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 ))*/?>
另一個(gè)按值排序的變體:
<?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) */
?>
我的示例數(shù)組用于排序:
<?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] => ?а?онишинос?);?>
此結(jié)果未按我的頂點(diǎn)排序從數(shù)組排序:
<?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] => ?урматой ) */?>
解決方法:
您可以使用此函數(shù)按任何字符順序?qū)?shù)組值進(jìn)行排序,這需要作為第二個(gè)參數(shù)提供:
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);}
就像標(biāo)準(zhǔn)的PHP函數(shù)一樣,它對(duì)數(shù)組進(jìn)行原位排序.
這是您將如何使用它:
$charOrder = ["а","б", "в", "г", "?", "д", "е", "ё", "?", "ж", "з", "и", "?", "й", "к", "?", "л", "м", "н", "о", "п", "р", "с", "т", "у", "?", "ф", "х", "?", "ч", "ш", "ъ", "э", "ю", "я"];// Sample unsorted array$arr = [ "?ктам?он", "?айрат", "маъруф?он", "рустам", "карим", "?урматой", "то?ик?", "забони то?ик?", "адолат" ];customSort($arr, $charOrder);
運(yùn)行上面的示例后,$arr將具有以下內(nèi)容:
array ( 'адолат', '?айрат', 'забони то?ик?', 'карим', 'маъруф?он', 'рустам', 'то?ик?', '?ктам?он', '?урматой',)
來(lái)源:https://www.icode9.com/content-1-521001.html
聯(lián)系客服