如何以最少的时间损失,根据数组中指定的字母表对一个大数组进行排序?

2024-02-05

如何以最少的时间浪费有效地按数组中指定的字母对具有百万个值的数组进行排序。

$letters = array(
"а","б", "в", "г", "ғ", "д", "е", "ё", "ҷ", "ж", "з", "и", "ӣ", "й", "к", "қ", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ӯ", "ф", "х", "ҳ", "ч", "ш", "ъ", "э", "ю", "я"
); 

按特定键对数组进行排序的简单函数。维护索引关联。该函数还对数组进行排序,但不是按我的字母表排序,而是按英文字母表排序(在英文字母中效果更好)。

<?php

function 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 first
print_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

) 
*/

?>

我的排序示例数组:

<?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] => ҷаҳонишиносӣ
);
?>

这个结果没有按我的 aplphabet 从数组中排序:

<?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 函数一样,它对数组进行排序in-place.

以下是您将如何使用它:

$charOrder = [
"а","б", "в", "г", "ғ", "д", "е", "ё", "ҷ", "ж", "з", "и", "ӣ", "й", "к", "қ", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ӯ", "ф", "х", "ҳ", "ч", "ш", "ъ", "э", "ю", "я"
];

// Sample unsorted array
$arr = [
        "ӯктамҷон",
        "ғайрат",
        "маъруфҷон",
        "рустам",
        "карим",
        "ҳурматой",
        "тоҷикӣ",
        "забони тоҷикӣ",
        "адолат"
    ];

customSort($arr, $charOrder);

运行上面的例子后,$arr会有这样的内容:

array (
  'адолат',
  'ғайрат',
  'забони тоҷикӣ',
  'карим',
  'маъруфҷон',
  'рустам',
  'тоҷикӣ',
  'ӯктамҷон',
  'ҳурматой',
) 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何以最少的时间损失,根据数组中指定的字母表对一个大数组进行排序? 的相关文章

  • 为什么当你删除一个项目时,Javascript 中的数组不调整大小? [复制]

    这个问题在这里已经有答案了 在许多语言中 标准动态列表 不是固定大小的数组 类型将在删除项目后调整大小 Python myList a b c del myList 0 print len myList Prints 2 C var myL
  • 如何在单击事件时向数组添加值

    我想要实现的是读取单击事件的值并将其保存到数组中 我的代码 a href class hotel Add to favourites a var hotelName hotel on click function e e preventDe
  • 制作一个js数组,输入框的值用空格分隔

    我正在尝试使用文本框进行用户输入并将它们放入数组中 基本上 如果用户输入像这样的字符串 10 23 4566 234 10 我希望将数字放入 10 23 4566 234 10 等数组中 这可能吗 我只处理数字 字符串可能会很长 你会想要使
  • 如何从网站网址中隐藏 .html 扩展名

    我知道这个问题以前曾被问过 但有人知道隐藏 html 扩展名的好方法吗 我已经尝试了许多代码和许多答案https stackoverflow com https stackoverflow com 但我没有看到结果 那是我再问你一次 我有一
  • 在哪里可以学习网络编程从入门到精通? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我尝试做教程 但它是无组织且无结构的 我在哪里可以学习 PHP 从初学者到大师 我正在寻找类似的网站w
  • 分页显示所有其他页面上第 1 页的相同帖子

    我最近在创建即将发生的事件列表时得到了很多帮助 请参阅此处显示即将举行的活动 包括今天的活动 https stackoverflow com questions 17343615 showing upcoming events includ
  • 将 cookie 设置为在当天结束时过期

    我想设置一个 cookie 并让它在一天结束时过期 这有效 但 24 小时后过期 setcookie route upgrade voted true time 86400 这不起作用 setcookie route upgrade vot
  • C# 和匿名对象数组

    这样的表达是什么意思呢 obj DataSource new new Text Silverlight Count 10 Link Tags Silverlight new Text IIS 7 Count 11 Link http iis
  • 如何将表中不存在但原始SQL中存在的实体字段设置为别名?

    假设我们有一个这样的查询 SELECT CUSTOM EXPRESSION as virtualfield FROM users 用户的实体本身具有 虚拟字段 但映射注释没有 因为表没有该字段 假设它作为原始 SQL 执行 我们如何使用上面
  • 如何按键中的值对 Redis 哈希进行排序

    Redis 有没有一种好方法来获取按值排序的哈希中的键 我查看了文档 但没有找到直接的方法 另外有人可以解释一下redis中的排序是如何实现的 以及什么吗 本文档 http redis io commands SORT using hash
  • 覆盖 FOS 用户包中的“更改密码”模板

    我做了一些研究 遗憾的是找不到任何帮助 因此 我将 FOSUserBundle ChangePasswordAction 渲染到我的模板中 但它显示供应商提供的默认模板 我的渲染控制器的模板 block body h2 Einstellun
  • Laravel Vue 组件只能传递数字?

    在我的 UserMenu vue 中我写道 export default props nameVal data return 并在blade php中
  • 如何在 Windows 上安装 Zend 框架

    安装 Zend Framework 就是这么简单 是的 对 好吧 我正在写一本初学者的书 有一件不太详细的事情是最重要的部分 安装该死的东西 浏览了几个小时的快速入门指南后 它只说 下载 Zend 添加包含目录 bla bla 然后就完成了
  • 如何使用更新资源控制器 laravel 4?

    我有带有索引 编辑 更新方法的客户控制器 Route resource customer CustomerController 控制器方法更新 public function update id echo id 我的 HTML 表单
  • 使用 dc.js 按条形值对条形图中的条形进行排序(排序)

    如何通过维度的计算值而不是维度本身的名称对 dc js 示例中的 x 轴 维度 进行排序 例如 请考虑序数条形图的 dc js 示例 https github com dc js dc js blob master web examples
  • 一次从多个表中删除行

    我正在尝试将 2 个查询合并为一个这样的查询 result db gt query DELETE FROM menu WHERE name new or die db gt error result db gt query DELETE F
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • PHP session_regenerate_id 和黑莓浏览器

    问候 我正在开发一个登录系统 并陷入了黑莓浏览器身份验证的困境 他们似乎对 PHP 的 session regenerate id 有问题 有人可以建议替代方案吗 以下是身份验证和登录脚本 UPDATE看来会话一般都不起作用 拿出 sess
  • PHP 表单 - 带验证蜜罐

    我有以下内容 效果很好 但对垃圾邮件机器人开放 我想放入蜜罐 而不是验证码 下面的代码适用于验证姓名 电子邮件 消息 但我无法让它与蜜罐一起工作 任何人都可以查看 蜜罐 代码并告诉我如何修复它吗 我希望表单给出 success2 不允许垃圾
  • 如何计算 3D 坐标的线性索引,反之亦然?

    如果我有一个点 x y z 如何找到该点的线性索引 i 我的编号方案是 0 0 0 是 0 1 0 0 是 1 0 1 0 是最大 x 维度 另外 如果我有一个线性坐标 i 我如何找到 x y z 我似乎无法在谷歌上找到这个 所有结果都充满

随机推荐

  • 如何将样式应用于嵌入的 SVG?

    当使用 SVG 直接包含在文档中时
  • Mac App开发:“***.app”已损坏且无法打开

    我有一个 Mac 应用程序 我已经有一段时间没有碰过它了 现在 自 macOS Catalina 以来 与 Mac App Store 集成运行应用程序的情况似乎发生了变化 https stackoverflow com q 5867337
  • 如何在 PHP 中 GET 或 POST 多部分数据请求

    我正在从 iOS 发送多部分请求以在服务器上上传图像或文档文件 我的要求就像 UIImage im UIImage imageNamed 57X57 png NSData imageData UIImageJPEGRepresentatio
  • 需要使用范围进行嵌套连接的 ActiveRelation

    我是 Rails 新手 玩得很开心 查询 API 给了我 有些麻烦 我一直在快速地缩放并做很多事情 但这是我第一次花几个小时试图弄清楚 它不像我以前使用过的任何东西 常规 SQL 或 Hibernate 管他呢 我的模型非常简单 私人消息有
  • 是否有用于标头(h1、h2、h3、h4、h5 或 h6)的 jQuery 选择器?

    jQuery 中似乎没有办法判断一个节点是否是标题 即 h1 h2 h3 h4 h5 或 h6 我想写一些类似的东西 hNode node closest h if hNode length gt 0 hNode css padding t
  • random_number() 如何并行工作?

    如何random number 与 OpenMP 并行工作吗 如果我在没有并行化的情况下运行程序 我总是得到相同的结果 但是通过并行化 我每次都会得到不同 但相似 的结果 不保证线程安全或线程性能random number一般来说 Fort
  • 在hadoop java中解析json输入

    我的输入数据位于 hdfs 中 我只是想进行字数统计 但有细微的差别 数据为json格式 所以每行数据为 author foo text hello author foo123 text hello world author foo234
  • 通过链接 2 列设置 R data.table 行顺序

    我试图弄清楚如何根据 2 列的链接对 R 数据表进行排序 这是我的示例数据表 dt lt data table id c A A A A A col1 c 7521 0 7915 5222 5703 col2 c 7907 5703 800
  • CommaIde 上未声明子例程“say”

    我用 CommaIde 打开了这个简单的脚本 usr bin env perl6 my str foobar say str IDE 突出显示单词 say 并显示错误 子程序说未定义 但是 如果我执行该脚本 它运行正常 其他核心方法 如 p
  • 在python中将二进制整数写入文件

    如何在 Python 3 中将整数写入二进制文件 例如 我想将 6277101735386680763835789423176059013767194773182842284081 以恰好 24 个字节的二进制格式写入文件 无符号 我只会使
  • 如果调用 fclose(0),这会关闭标准输入吗?

    如果调用 fclose 0 这会关闭标准输入吗 我问这个问题的原因是由于某种原因 stdin 在我的应用程序中被关闭 我不明白为什么 我检查了 fclose stdin 但这不在应用程序中 所以我想知道 fclose 0 是否会导致未定义的
  • 仍然对 Objective-C 的动态绑定感到困惑

    这个问题来自我刚刚添加到答案中的评论这个问题 https stackoverflow com questions 6608551 question about dynamic binding objective c and methods
  • 看起来我正在实例化这个 SpeechAPI 接口。这怎么可能?

    我在我的项目中使用 Microsoft 文本到文本语音功能 但我对此有一个问题 实际上不是直接的问题 所以 通常程序员在创建接口时 他们会将 I 作为接口名称的前缀 如 IReadable IEnumerator 等 但我遇到过一些让我震惊
  • Unity 2D:区域颜色反转效果

    我正在尝试创建一个 GameObejct 如果处于活动状态 则会反转其后面任何内容的颜色 理想情况下 当该游戏对象出现 变为活动状态时 它会从其中心点扩展到一定大小的半径 因此 想象一个圆 其比例在 1 或 2 秒内逐渐从 x 0 和 y
  • 如何排除模板文字类型的子字符串?

    我想从模板文字类型 自 TypeScript 4 1 起可用 中排除一些子字符串 但我不知道是否可能 Example 我可以定义一个类型说 这个字符串是一个包含 2 个或更多元素的元组 即类似的东西 string number 使用这个文字
  • Symfony 2 - 在 ROLE_USER 下添加用户角色

    我正在尝试在 Symfony 2 中的默认 USER ROLE 下创建一个新角色 该角色对某些功能的写访问权限有限 我正在使用 FOSUserBundle 到目前为止 我已经编写了以下安全设置 但我的 ROLE DEMO 用户仍然获得 RO
  • Rails 时区问题

    这是我的控制台 irb main 048 0 gt Time now gt 2011 04 13 00 51 50 0200
  • Python ctypes 和动态链接

    我正在用 C 编写一些库 其中包含我想通过 ctypes 从 Python 调用的函数 我已经在另一个库中成功完成了此操作 但是该库只有非常普通的依赖项 即fstream math malloc stdio stdlib 我正在开发的另一个
  • 如何要求 XSD.exe 为我生成正确的类,以便我可以创建良好的 XML

    我从 Visual Studio 2010 创建了一个 XSD 文件 然后我用xsd c mydemo xsd为我生成类 以便我可以在运行时创建 XML 文件 但是 当我使用该类 填充一些值并序列化该对象时 XML 文件对我来说看起来不太好
  • 如何以最少的时间损失,根据数组中指定的字母表对一个大数组进行排序?

    如何以最少的时间浪费有效地按数组中指定的字母对具有百万个值的数组进行排序 letters array 按特定键对数组进行排序的简单函数 维护索引关联 该函数还对数组进行排序 但不是按我的字母表排序 而是按英文字母表排序 在英文字母中效果更好