打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
php-如何根据数组中指定的字母对大型数组进行排序,以减少时间损失?

我如何用数组中指定的字母有效地对具有百万个值的数组进行排序,而又不会浪费时间.

$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
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
PHP中数组的区别
[PHP] 判断两个数组是否相同
PHP 对数组使用 自然算法 进行排序 natsort 与 natcasesort 函数
php 二维数组排序函数
PHP将一数组遍历放到另一数组方法
php数组声明、遍历、数组全局变量使用小结
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服