PHP - 根据另一个数组的元素对数组元素进行排序:)

2023-12-13

所以我有两个数组。其中之一看起来像这样(它的值或元素的数量可以改变):

array('4dec' , 'def3', 'a3d6', 'd12f');

和另一个:

array(array('id' => 'd12f', 'name' => 'John'),
      array('id' => 'a5f1', 'name' => 'Kathy'),
      array('id' => 'def3', 'name' => 'Jane'),
      array('id' => 'a3d6', 'name' => 'Amy'),
      array('id' => '4dec', 'name' => 'Mary'),      
      array('id' => 'ecc2', 'name' => 'Fred'));

(这个不应该改变,元素和值每次都是相同的)。

请注意,第一个有第二个的一些元素。 如何根据第一个数组中的元素对第二个数组进行排序?

所以基本上,在这种情况下,第二个数组应该变成:

array(array('id' => '4dec', 'name' => 'Mary'),
      array('id' => 'def3', 'name' => 'Jane'),
      array('id' => 'a3d6', 'name' => 'Amy'),
      array('id' => 'd12f', 'name' => 'John'),
      array('id' => 'a5f1', 'name' => 'Kathy'),
      array('id' => 'ecc2', 'name' => 'Fred'));

(第一个元素中存在的元素被移动到顶部,顺序与第一个元素相同,其他元素保持不变)。


稳定性是一个变化,因为 PHP 不再尊重这一点,但一些额外的工作可以保持排序的稳定性。

$order_by = array('4dec' , 'def3', 'a3d6', 'd12f');

$data = array(array('id' => 'd12f', 'name' => 'John'),
              array('id' => 'a5f1', 'name' => 'Kathy'),
              array('id' => 'def3', 'name' => 'Jane'),
              array('id' => 'a3d6', 'name' => 'Amy'),
              array('id' => '4dec', 'name' => 'Mary'),      
              array('id' => 'ecc2', 'name' => 'Fred'));

// create a lookup table for sorted order to avoid repeated searches
$order_index = array_flip($order_by);

// create a lookup table for original order: in PHP 4.1.0 usort became unstable
// http://www.php.net/manual/en/function.usort.php
$orig_order_by = array_map(function($a){return $a['id'];}, $data);
$orig_index = array_flip($orig_order_by);

// sort values by specified order, with stability
$compare = function($a, $b) use (&$order_index, &$orig_index) {
    $aid = $a['id'];
    $bid = $b['id'];

    $ai = $order_index[$aid];
    $bi = $order_index[$bid];

    if ($ai === null and $bi === null) { // original sort order for stability
        return $orig_index[$aid] - $orig_index[$bid];
    }
    if ($ai === null) { return 1; }
    if ($bi === null) { return -1; }

    return $ai - $bi;
};
usort($data, $compare);
var_dump($data);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP - 根据另一个数组的元素对数组元素进行排序:) 的相关文章

  • 如何检查PHP变量是否包含非数字?

    我只是想知道检查 PHP 变量中是否有非数字的方法以及它是否也检测字符之间的空格 需要确保我的表单字段中没有添加任何奇怪的内容 提前致谢 如果您的意思是您只想要一个包含数字的值 那么您可以使用ctype digit http php net
  •  
    标记内删除

    我制作了简单的 BBCode 脚本 一切正常 但后来我使用了一个 javascript 库来美化我的代码 pre pre 现在我面临的唯一问题是 br 每行代码后面的标签 pre pre tags 所以问题是我怎样才能删除 br 标记哪些在
  • PHP 会话不适用于游戏

    我正在尝试模仿一款名为 SKUNK 用骰子玩 的游戏来完成一项作业 我无法让会话正常工作 这是我第一次使用 PHP 我还被告知无需会议即可完成 这是我的代码
  • 在 C 中将字符追加到字符数组

    我想将一个字符附加到代表字符串的字符数组中 我正在使用结构来表示字符串 struct String char c int length int maxLength String realloc弄乱了我的数组 当我打印字符串时 它会从内存中打
  • 如何从父类函数访问子类中定义的常量?

    我从 php net 看到这个例子 但 c MY CONST 仅在 5 3
  • dart中解析对象(不支持的操作:无法添加到固定长度列表)

    我有一个用户对象 当用户登录 注册时 该对象保存到云 Firestore 数据库中 因此 当用户登录时 将从数据库中检索用户对象 并且一切正常 直到我尝试对列表 usersProject 执行 添加 操作 Add the new proje
  • 在 VB.Net 中将字节数组转换为整数

    我想知道在 vb net 中将字节数组 长度 4 转换为整数的最佳方法是什么 我知道 BitConverter 但执行函数调用来执行应该可以通过复制 4 字节内存来完成的操作似乎相当浪费 同样 将单 双精度数从二进制表示形式转换为单 双精度
  • 从 smarty 访问 PHP 文件的变量(本地或全局)

    我有一个 php 文件 其中包含一些本地和全局变量 例如 foo 从此文件中调用 smarty 对象 如何在不更改 PHP 文件的情况下从 smarty 脚本访问 foo Thanks 如果你有一个名为 BASE 的常量变量 并且定义如下
  • Symfony2 Assetic 和 Less Sourcemaps

    我不确定如何破解 assetic less 过滤器以输出源映射文件 我这里指的是LessFilterhttps github com kriswallsmith assetic blob master src Assetic Filter
  • preg_match_all 查询仅显示有问题的外部组

    我无法弄清楚如何只显示 preg 查询的外部组级别 我会给你一个例子 preg match all start end input matches 这个输入start1 start2 2end 1end产生这个输出start1 start2
  • 从 .phar 存档中提取文件

    对于 Phar 文件 我完全错过了一些东西 我正在安装一个需要 phpunit pdepend 和其他依赖项的项目 我将它们作为 phar 文件获取 但是 我无法使用命令行工具 php 命令 从中提取文件 我用谷歌搜索了这个问题 但没有发现
  • 为什么 iconv 在 php:7.4-fpm-alpine docker 中返回空字符串

    给出以下代码
  • 从数组中删除空白元素

    当我从 ruby on Rails 表单中保存多个选择时 它似乎在前面添加了一个空白元素 我该如何删除它 该字段为 selected player utf8 gt authenticity token gt H8W7qPBezubyeU0a
  • 最小化代表性整数的误差之和

    Given n integers between 0 10000 as D1 D2 Dn where there may be duplicates and n can be huge I want to find k distinct r
  • 在 Wordpress 站点中进行 AJAX 调用时出现问题

    我在使用 Wordpress 站点功能的 AJAX 部分时遇到了一些问题 该功能接受在表单上输入的邮政编码 使用 PHP 函数来查找邮政编码是否引用特定位置并返回到该位置的永久链接 我的第一个问题是关于我构建的表单 现在我的表单操作是空白的
  • 随机组合 MySQL 数据库中的两个单词

    我有一个包含名词和形容词的数据库 例如 id type word 1 noun apple 2 noun ball 3 adj clammy 4 noun keyboard 5 adj bloody ect 我想创建一个查询 它将抓取 10
  • PHP HEREDoc (EOF) 语法在 Sublime Text 3 上突出显示与正斜杠的差异

    我不熟悉 Sublime Text 3 如何使用语法突出显示 例如 如果它纯粹依赖于主题 或者它内置于主题运行的标准中 但就我而言 使用 PHP 的 HERE 文档和转发存在一些语法突出显示差异斜线 一旦出现正斜杠 ST3 就会认为以下所有
  • CURL 中的 data-urlencode 是什么意思?

    我搜索了很多个小时试图弄清楚 php curl 中的 data urlencode 是什么 我尝试过这个 但我认为这是不对的 xmlpost object1 file https www lob com goblue pdf 在文档中是 d
  • php,统计字符并删除超过140个字符的内容

    我需要一个 PHP 函数来计算短语的字符数 如果短语长度超过 140 个字符 则此函数应删除所有其他字符并在短语末尾添加三个点 例如我们有 message I am what I am and you are what you are et
  • 无法显示 Laravel 欢迎页面

    我的服务器位于 DigitalOcean 云上 我正在使用 Ubuntu 和 Apache Web 服务器 我的家用计算机运行的是 Windows 7 我使用 putty 作为终端 遵循所有指示https laracasts com ser

随机推荐

  • WCF ria 服务 SP1 超时已过期

    我的解决方案是 Silverlight 它使用 WCF RIA 服务 SP1 和实体框架 4 我在加载大尺寸数据时遇到问题 我收到此错误消息 System ServiceModel DomainServices Client DomainE
  • 同一 JPA 类的多个数据库支持

    我们的项目使用 MYSQL 和 Hibernate JPA用于将对象持久保存在数据库中 我们有多个具有相似代码的类 Entity Table name users class Users implement Serializable Id
  • 当出现 E_USER_DEPRECATED 级别错误时如何运行 Behat 测试

    我有一个 Symfony 2 7 表单类型 它导致了一些级别错误E USER DEPRECATED 这个错误不是来自我自己的代码 而是来自vendor symfony symfony src Symfony Bridge Doctrine
  • Python套接字模块:如何更改客户端的本地端口?

    我想使用 TCP IP 作为客户端从网络获取包 With connect TCP IP TCP PORT 我可以更改对等地址的端口 但是我改变了本地计算机的端口 编辑 我想使用带有四个端口的网卡 网卡连接到发送大量数据的测量设备 我如何查看
  • 如何从身份验证器重定向到外部身份验证端点?

    我正在编写一个网络应用程序 由于不同客户的需求 我希望拥有灵活的身份验证选项 我用的是官方的cakephp 身份验证库 但它没有 OpenID Connect 身份验证器 所以我正在滚动自己的 我遇到的问题是我无法返回修改后的Cake Ht
  • 解码 IntelliJ IDEA 文件夹名称颜色

    我有一个项目 有 4 个 Git 根 Project Project commons Project ui and Data Model 由于某些配置 我需要放置Project commons Project ui and Data Mod
  • 向 BroadcastReceiver 发送额外内容

    我有一个运行以下代码的活动 定义了时间和间隔 Intent buzzIntent new Intent getBaseContext BuzzReceiver class PendingIntent pendingIntent Pendin
  • 上周一的日期 Excel

    今天是 2013 年 2 月 27 日 星期三 我需要一个公式 该公式将返回上周一的日期 即 02 17 2013 我需要这样才能在发送电子邮件的 vba 代码中使用文件名或电子邮件主题 With oMail Uncomment the l
  • 是否可以在 Silverlight 中绑定到 lambda 表达式?

    我有一个仅绑定到集合的列表框 该集合有一个子集合 StepDatas 我想绑定到子集合的计数 但使用 WHERE 语句 我可以绑定到 ChildCollection Count 但在需要添加 lambda 表达式时会迷失方向 这是 XAML
  • 在 init 中使用属性访问 iVar?

    这是上一个问题的分支 这是不好的做法吗 使用属性来设置 iVar Designated initializer 001 id initWithName NSString newName andType NSString newType se
  • 如何计算R中沿线的两点之间的地理距离?

    Inputs 我有两个形状文件导入到 R 中 这样我最终得到了 包含公交路线的空间线数据框 包含公交车站的空间点数据帧 绘制给定路线及其停靠点如下所示 样本数据 This link包括两个可作为 zip 格式下载的 shapefile 其中
  • IF EXISTS 条件不适用于 PLSQL

    我正在尝试在条件为 TRUE 时打印文本 选择的代码工作正常 当我只运行选择代码时 它显示 403 值 但当条件存在时我必须打印一些文本 下面的代码有什么问题 BEGIN IF EXISTS SELECT CE S REGNO FROM C
  • 用于测验应用程序的 Rails 关联和数据库设计

    我正在构建这个测验应用程序 我希望它有点复杂 我想出了这个数据库模式 但我真的很困惑 对我需要什么关联和东西感到困惑 嗯 需要注意的一件事是 当创建测试时 没有关于参加该测试的考生人数的信息 所以 我创建了test questions an
  • AJAX jQuery 每 5 秒刷新一次 div

    我从一个网站获得了这段代码 并根据我的需要进行了修改 div div
  • 如何使用适当的特异性来设计没有 !important 的 :root 样式

    里面一个自定义元素因为border color在父页面上设置 我无法设置border color不求助于工作 important host player O color var color2 border color var color2
  • perl fork() exec() ,子进程疯狂

    我在用Linux and sh is in tcsh 我做了一个非常基本的fork and exec 但我需要帮助来实施安全措施 基本上我的 perl 脚本调用 sh子进程中的脚本 但当我这样做时Ctrl c为了杀死父进程 子进程会忽略该信
  • Excel 中的链接表和切片器

    我无法在 Excel 中创建一个切片器 该切片器不仅按主表进行过滤 还按辅助表进行过滤 该辅助表应与第一个表 具有作为引用的字段键 链接 换句话说 主表是students表 有一个唯一的ID作为引用 第二个表是每个学生参加的课程 我希望切片
  • CentOS 7 上 Ambari 2.7.5 安装失败

    我正在 CentOS 7 计算机上安装 Apache Ambari 2 7 5 我正在关注Apache 网站上的安装指南 指南第 1 步的最后一个命令 mvn B 全新安装 rpm rpm DnewVersion 2 7 5 0 0 Dbu
  • 将结果右对齐

    我再次问同样的问题 现在提供更多详细信息 希望能得到有效的解决方案 在下面的代码中 输出将打印对齐到行的右侧 table border 1 style width 100 tr td align right div test div td
  • PHP - 根据另一个数组的元素对数组元素进行排序:)

    所以我有两个数组 其中之一看起来像这样 它的值或元素的数量可以改变 array 4dec def3 a3d6 d12f 和另一个 array array id gt d12f name gt John array id gt a5f1 na