Php 如何根据数组中指定的字母表对大型数组进行排序,且时间损失最小?
如何按数组中指定的字母对具有百万值的数组进行有效排序,并将时间浪费降至最低Php 如何根据数组中指定的字母表对大型数组进行排序,且时间损失最小?,php,arrays,performance,sorting,Php,Arrays,Performance,Sorting,如何按数组中指定的字母对具有百万值的数组进行有效排序,并将时间浪费降至最低 $letters = array( "а","б", "в", "г", "ғ", "д", "е", "ё", "ҷ", "ж", "з", "и", "ӣ", "й", "к", "қ", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ӯ", "ф", "х", "ҳ", "ч", "ш", "ъ", "э", "ю", "я" ); 按特定键对数组排序的简单函数。保
$letters = array(
"а","б", "в", "г", "ғ", "д", "е", "ё", "ҷ", "ж", "з", "и", "ӣ", "й", "к", "қ", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ӯ", "ф", "х", "ҳ", "ч", "ш", "ъ", "э", "ю", "я"
);
按特定键对数组排序的简单函数。保持索引关联。此函数还对数组进行排序,但不是用我的字母表,而是用英文字母表(用英文字母效果更好)
另一个按值排序的变量:
<?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
)
*/
我的排序示例数组:
<?php
Array
(
[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] => ҷаҳонишиносӣ
);
?>
此结果未按数组中的我的APLPHBET排序:
<?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] => ҳурматой
)
*/
?>
您可以将与第二个参数一起使用,因为您希望字符串不是以英文排序。例如:
$charOrder = [
"а","б", "в", "г", "ғ", "д", "е", "ё", "ҷ", "ж", "з", "и", "ӣ", "й", "к", "қ", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ӯ", "ф", "х", "ҳ", "ч", "ш", "ъ", "э", "ю", "я"
];
// Sample unsorted array
$arr = [
"ӯктамҷон",
"ғайрат",
"маъруфҷон",
"рустам",
"карим",
"ҳурматой",
"тоҷикӣ",
"забони тоҷикӣ",
"адолат"
];
customSort($arr, $charOrder);
这里您可以根据您的语言进行更改,我以法语为例。您可以使用此函数按任意字符顺序对数组值进行排序,您需要将其作为第二个参数提供:
array (
'адолат',
'ғайрат',
'забони тоҷикӣ',
'карим',
'маъруфҷон',
'рустам',
'тоҷикӣ',
'ӯктамҷон',
'ҳурматой',
)
与标准PHP函数一样,它对数组进行排序
以下是您将如何使用它:
运行上述示例后,$arr
将包含以下内容:
我改变了我的问题并测试了你的答案,但结果不是我想要的@Rohit Ailanit如果排序是在数组中指定的字母上,对我来说会更好。即使在语言字母表暴露或减少时也不会有问题。当我使用@trincot时,函数返回“1”。你检查过功能的性能了吗?如果是这样,请给我一个链接,以便我可以查看它。该函数返回true
,就像标准的排序
函数一样。作为参数传递的数组由函数进行变异,并将进行排序。这是PHP中排序函数的标准行为。性能应该很好,但不能超过PHP中内置的基于区域设置的排序方法。这个函数对您来说是否花费了太长的时间?我使用了9000000个值的数组,函数稍微延迟了一点,这个函数可以稍微快一点?我认为您不能做太多的事情来加速这个过程(除了使用合适的区域设置)。瓶颈是strtr
。
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);
}
$charOrder = [
"а","б", "в", "г", "ғ", "д", "е", "ё", "ҷ", "ж", "з", "и", "ӣ", "й", "к", "қ", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ӯ", "ф", "х", "ҳ", "ч", "ш", "ъ", "э", "ю", "я"
];
// Sample unsorted array
$arr = [
"ӯктамҷон",
"ғайрат",
"маъруфҷон",
"рустам",
"карим",
"ҳурматой",
"тоҷикӣ",
"забони тоҷикӣ",
"адолат"
];
customSort($arr, $charOrder);
array (
'адолат',
'ғайрат',
'забони тоҷикӣ',
'карим',
'маъруфҷон',
'рустам',
'тоҷикӣ',
'ӯктамҷон',
'ҳурматой',
)