php - 按自定义标准对数组进行排序

2024-01-25

我有一个对象数组:

object1->
name="Name1"
key="key1"

object2->
name="Name2"
key="key2"

object3->
name="Name3"
key="key3"

和一组优先级键:

$keys = ["key3", "key1"];

我需要根据优先级键对对象数组进行排序,因此结果应该是:

object3:
name="Name3"
key="key3"

object1->
name="Name1"
key="key1"

object2:
name="Name2"
key="key2"

最好的方法是什么?


这个想法是添加一个整数优先级,并使用从最高整数到最低整数对数组进行排序usort()

例如你有这个数据

 <?php

 $data = [];

 $data[0] = new stdClass;
 $data[0]->name = "name1";
 $data[0]->key = 'key1';

 $data[1] = new stdClass;
 $data[1]->name = "name2";
 $data[1]->key = 'key2';

 $data[2] = new stdClass;
 $data[2]->name = "name3";
 $data[2]->key = 'key3';


 $keys = ["key3", "key1"];

你可以这样排序

function sortByPriority($data , $keys){
    $priority = array();
    $i = count($keys);
    foreach ($keys as $key => $value) {
      $i--;
      $priority[$value] = $i;
    }
    usort($data, function($a, $b) use($priority){
      $a = isset($priority[$a->key]) ? $priority[$a->key] : -1;
      $b = isset($priority[$b->key]) ? $priority[$b->key] : -1;
      return $b - $a;
    });

    return $data;
 }


 var_dump(sortByPriority($data, $keys));    

样本输出

array (size=3)
  0 => 
    object(stdClass)[3]
      public 'name' => string 'name3' (length=5)
      public 'key' => string 'key3' (length=4)
  1 => 
    object(stdClass)[1]
      public 'name' => string 'name1' (length=5)
      public 'key' => string 'key1' (length=4)
  2 => 
    object(stdClass)[2]
      public 'name' => string 'name2' (length=5)
      public 'key' => string 'key2' (length=4)    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

php - 按自定义标准对数组进行排序 的相关文章

  • Yii2:使用 Pjax POST 方法和分页在 Gridview 中搜索

    我是 yii2 的初学者 尝试在搜索按钮上使用 Pjax 来搜索 Gridview 中的字段 我已经使用 GET 方法完成此操作 但我想使用 POST 方法完成此操作 那么我该如何使用 Yii2 Pjax post 方法 和分页来做到这一点
  • 如何对 PHP 数组中的值进行排序/过滤?

    我需要 foreach 这个数组的值 My CODE 该代码的结果 Array 0 gt Array 0 gt Age Name 1 gt 22 Yrs Value 2 gt Ethnicity Name 3 gt Caucasian Va
  • SCORM 与 PHP/Yii 的集成 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 实际上我是新手SCORMPHP 中的实现 理论上 我在这里提问之前已经介绍了这些领域 已经看过了维基百科 http en wikipedia
  • Pear PHP UML 类图 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试创建现有代码的图形表示 我尝试使用 VS PHP 使用 Visual Studios 201
  • 我应该使用 htmlspecialchars 或 mysql_real_escape_string 或两者都使用[重复]

    这个问题在这里已经有答案了 我让用户输入一些信息 姓名 出生日期等 然后我必须将这些值插入数据库 我应该使用mysql real escape string http php net mysql real escape string防止 m
  • PHP UTF-8 问题 - 如果我在 PHP 中创建一个字符串...它是 UTF-8 格式吗?

    在 PHP 中 如果我创建一个像这样的字符串 str bla bla here is my string 然后我可以使用 mbstring 函数将该字符串作为 UTF8 进行操作吗 Will this work str mb strlen
  • 改进将字符串转换为可读的 url

    以下函数重写包含各种字符的新闻和产品标题的 url 我希望创建的字符串仅包含字母数字值和 但没有结尾 或空格 也没有重复的 下面的函数工作正常 但我想知道是否有任何方法可以将其编写得更简单或更有效 function urlName stri
  • SMTP:无法连接套接字:无法找到套接字传输“ssl”

    我一直在尝试在 WAMP 上使用 Pear 发送电子邮件通过 GMail 花了几个小时将其全部设置并找出我遇到的所有错误后 我以为我已经很接近了 直到我开始收到此错误 Failed to connect to ssl smtp gmail
  • 根据特定行中的值对列重新排序。

    我在数据框中有以下数据 aa bb cc 1 3 4 5 2 5 4 3 3 7 8 6 100 33 63 55 我需要根据最后一行中的值对列重新排序 这种转变的结果将是 bb cc aa 1 4 5 3 2 4 3 5 3 8 6 7
  • 当我使用加盐 CRYPT_MD5 加密我的密码时,正在加密什么?

    对字符串使用 md5 总是会产生字母数字加密结果 即 没有符号 然而 当我使用 php crypt 函数 特别是带有盐的 CRYPT MD5 并且它已打开 我已经检查过 时 它返回的假定 md5 哈希看起来不像 md5 哈希 例如 如果我
  • PHP 中消息队列和工作系统的有效架构?

    我正在尝试了解我想要在 PHP 应用程序中实现的消息队列模型和作业 我的目标是卸载需要发送到多个第三方 API 的消息 数据 因此访问它们不会减慢客户端的速度 所以将数据发送到消息队列是理想的 我考虑过仅使用 Gearman 来保存 MQ
  • 如何在数据库中找到实际的联系表7结构?

    我想找到我所有表单的实际代码 有很多 例如 cf7 代码如下所示
  • Mysql为简单频繁查询创建排序索引性能

    我正在处理一个包含大约 400 万条消息条目的 mysql 表 并尝试根据时间戳选择最新的 50 条消息 另一个要求是返回的消息不以固定前缀开头 问题是单个查询大约占用 25 的 cpu 并且最多需要 1 5 秒 该查询经常由多个客户端执行
  • 解码Json数据数组并插入到mysql

    这个问题可能已经在这里问过 但我尝试搜索找不到它 我有如下 Json 数据 CityInfo CityCode 5599 Name DRUSKININKAI CityCode 2003 Name KAUNAS CityCode 2573 N
  • PySpark - RDD 到 JSON

    我有一个 Hive 查询返回以下格式的数据 ip category score 1 2 3 4 X 5 10 10 10 10 A 2 1 2 3 4 Y 2 12 12 12 12 G 10 1 2 3 4 Z 9 10 10 10 10
  • 如何使用 Symfony2 使 form_rest() 不显示字段?

    我已经开始使用 Symfony2 但遇到了一些问题 我想手动渲染字段 但它不起作用 因为我尚未渲染的字段显示为form rest 函数也一样 所以我有两个相同的字段 这是我的代码 div form errors form contenu d
  • 检查外部图像是否存在的正确 PHP 方法?

    我知道至少有 10 个相同的问题有答案 但似乎没有一个对我来说完美无缺 我正在尝试检查内部或外部图像是否存在 图像 URL 是否有效 fopen url r 失败 除非我使用 fopen Warning fopen http example
  • FOSRestBundle:显示我的自定义异常消息

    我试图在 FOSRestBundle 中添加异常的自定义控制 但它似乎忽略了我的自定义消息 响应的状态代码正常 I have throw new HttpException 404 User id not found 但得到这个 json
  • 如何将 JSON 文本转换为 PHP 关联数组

    我将以下 JSON 对象存储在文本文件 data txt 中 player black time 0 from 2c to 3d 我使用 php 阅读 问题 有没有简单的方法可以转换 data到 PHP 关联数组 我尝试过使用json de
  • 如何使用 monolog ElasticSearchHandler 登录 Laravel 应用程序

    Monolog 包含弹性搜索处理程序和格式化程序 但它作为自定义通道对 Laravel 的实现并不像 Laravel 文档网站上描述的那么简单 以下是如何执行此操作的简要分步说明 为您的弹性搜索日志记录创建一个配置文件 config ela

随机推荐

  • 如果鼠标在元素内部,则延迟 mouseenter 事件并引发事件

    我使用这个基于 jQuery 开发的选项卡视图 https d2o0t5hpnwv4c1 cloudfront net 001 Tabbed site jQuery html https d2o0t5hpnwv4c1 cloudfront
  • 模拟拖动窗口标题栏的控件

    我已经构建了一个自定义控件 我希望允许人们单击并拖动我的控件 就像在窗口标题栏上拖动一样 做这个的最好方式是什么 到目前为止 我未能成功地利用鼠标向下 向上和移动事件来破译何时需要移动窗口 除了我的其他答案之外 您还可以在控件中手动执行此操
  • 将多个子视图传递给 SwiftUI 中的视图

    我创建了一个 Swift 包 它根据传递给它的内容数组创建多个 PageTabView import SwiftUI public struct WhatsNewView
  • 登录后活动管理员重定向

    当管理员登录时 它会自动重定向到主主页 即不是管理仪表板 我不确定为什么会这样做或如何改变它 路线 rb ActiveAdmin routes self devise for admin user ActiveAdmin Devise co
  • 匹配最长重复序列的正则表达式

    我想匹配至少重复一次的最长序列 Having T send ack new amend pending cancel replace replaced cancel pending cancel replace replaced 结果应该是
  • Sql Server 更改数据捕获:添加列时保留历史记录?

    将新列添加到配置为更改数据捕获 cdc 的表时 捕获实例表不会有新列 直到为源表禁用并重新启用 cdc 在此过程中 现有的捕获实例将被删除 我想我可以将现有数据复制到临时表中 然后使用以下 SQL 复制回来 但是 其他 CDC 元信息 例如
  • 添加 GROUP BY 子句产生的列

    我遇到了这样的情况 使用 GROUP BY 后需要从两行添加列 我的查询如下 select AcctId DC sum TrnAmt from TableId group by AcctId DC order by AcctId DC Re
  • Android动画暂停和播放问题

    我使用以下代码创建了一个动画 private AnimationSet rootSet new AnimationSet true private int xstart 258 private int ystart 146 for k
  • 按名称获取班级

    我可以通过名称获取一个类吗 例如 class Foo class Bar let x Foo classByString x need to return Foo 我想使用元编程来减少代码维护 您可以使用NSClassFromString
  • WPF 控件中的本机 Win32 窗口

    我正在开发一个需要主机本机 Win32 窗口的应用程序 但不知何故我不知道如何做到这一点 我需要创建一个可以在其上显示本机 Win32 控件的 WPF 对话框窗口 该对话框窗口上也将具有 WPF 控件 因此我正在寻找某种可以获取 HWND
  • 使用 Vaadin 登录的 Spring Boot 安全性

    我尝试构建一个基于 Spring Boot 1 2 7 RELEASE 和 Vaadin 7 6 3 的应用程序 我的问题是我无法将 Spring Security 与 Vaadin 集成 我想要一个自定义 Vaadin 构建的 Login
  • ASP.NET Web App 使用错误的 (2.0) CLR 版本(而不是 4.0)

    我刚刚将我一直在开发的 ASP NET Web 应用程序部署到新的开发机器上 这是一个从3 5转换而来的4 0项目 由于某种原因 当我尝试通过默认网站下的 IIS 网站访问该网站时 出现以下错误 无法识别的属性 targetFramewor
  • Python requests & urllib3 Retry - 如何从内部重试循环内部模拟 ConnectionError?

    给出以下示例用法 adapter HTTPAdapter max retries Retry total 5 backoff factor 0 1 status forcelist 429 500 502 503 504 method wh
  • 为什么这个 jQuery .change 事件在 .click 事件之后停止工作

    我有一个脚本 它显示数组中的问题 并使用以下命令从一个问题切换到下一个问题 click两个按钮上的事件 上一个和下一个 当我加载页面时 radio change选择器工作正常 但是当我单击上一个或下一个时 它停止工作 我尝试改变 previ
  • 正则表达式匹配双引号内的每个字符串并包含转义引号

    已经有很多类似的问题了 但没有一个适合我的情况 我有一个字符串 其中包含双引号内的多个子字符串 并且这些子字符串可以包含转义的双引号 例如对于字符串 然后 这是一些带有引号和 转义引号 的示例文本 并不是说我们需要更多 而是 这是 另一个
  • 如何让 Push() 键生成我的 Firebase?

    正如你从照片中看到的 我有一个孩子FreezerItems 在该子项下我还有另外两个子项 它们是 Firebase 使用创建的随机键push 我的问题是 我具体如何获得密钥L8i2M4wNUF5wOojaFE 另外我如何将该密钥放入我的Re
  • 如何在 f# 中执行多行 lambda 表达式?

    我该如何在 F 中执行此操作 C public class MyClass void Render TextWriter textWriter Tag gt textWriter WriteLine line 1 textWriter Wr
  • 无法使用 Visual Studio 2013 运行 Cordova 应用程序

    我已成功安装 多设备混合应用程序 所需的所有第三方设置 但是当我使用 Visual Studio 2013 运行我的应用程序时 出现以下两个错误 Error 1 cmd Command failed with exit code 255 E
  • 基于公共id连接两个js对象数组的函数式方法

    我正在尝试实现类似于 SQL 表连接的功能 以最优雅 功能 的方式 最好使用 underscore js 所以请不要使用 for 循环 我需要合并两个不同数组中的对象 并与一个公共标识符进行匹配 例如 给定 var basic id 1 n
  • php - 按自定义标准对数组进行排序

    我有一个对象数组 object1 gt name Name1 key key1 object2 gt name Name2 key key2 object3 gt name Name3 key key3 和一组优先级键 keys key3