Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何根据数组中指定的字母表对大型数组进行排序,且时间损失最小?_Php_Arrays_Performance_Sorting - Fatal编程技术网

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 (
  'адолат',
  'ғайрат',
  'забони тоҷикӣ',
  'карим',
  'маъруфҷон',
  'рустам',
  'тоҷикӣ',
  'ӯктамҷон',
  'ҳурматой',
)