按最高值对 n 个项目进行多维自定义排序

2024-02-19

我目前可以使用自定义排序方法对多维数组进行排序。每个数组lineupSet has an n物品数量。功能sort_points将对每个进行排序lineupSet从最高到最低totalPoints然后它会给我lineupSet总数最高totalPoints。我目前正在改变方法,我仍然想对每个进行排序lineupSet首先并按从高到低的顺序排列。然后我想获得最高totalPoints每个lineupSet基于给定的计数。解决这个问题的最佳方法是什么?

测试阵列:

$testArray = [[
    "lineupSet" => [
        [[
            "formula" => [
                "totalPoints" => 214.61,
            ],
            "name"    => "arr0-test0",
        ], [
            "formula" => [
                "totalPoints" => 201.17,
            ],
            "name"    => "arr0-test1",
        ]], [
            "formula" => [
                "totalPoints" => 5.01,
            ],
            "name"    => "arr0-test2",
        ]],
], [
    "lineupSet" => [
        [[
            "formula" => [
                "totalPoints" => 214.76,
            ],
            "name"    => "arr1-test0",
        ], [
            "formula" => [
                "totalPoints" => 220.66,
            ],
            "name"    => "arr1-test1",
        ]],
    ],
], [
    "lineupSet" => [
        [[
            "formula" => [
                "totalPoints" => 205.71,
            ],
            "name"    => "arr2-test0",
        ], [
            "formula" => [
                "totalPoints" => 204.43,
            ],
            "name"    => "arr2-test1",
        ]],
    ],
], [
    "lineupSet" => [
        [[
            "formula" => [
                "totalPoints" => 205.48,
            ],
            "name"    => "arr3-test0",
        ], [
            "formula" => [
                "totalPoints" => 203.51,
            ],
            "name"    => "arr3-test1",
        ]],
    ],
]];

排序功能

function sum_points($v) {
    $totalPoints = 0;
    foreach ($v['lineupSet'] as $lset) {
        if (isset($lset['formula'])) {
            $totalPoints += $lset['formula']['totalPoints'];
        }
        else {
            foreach ($lset as $l) {
                $totalPoints += $l['formula']['totalPoints'];
            }
        }
    }
    return $totalPoints;
}

function sort_points($a, $b) {
    return sum_points($b) - sum_points($a);
}

usort($testArray, 'sort_points');
print_r($testArray[0]);

例如,我想获得前两个最高的“totalPoints”。期望的结果:

Array (
    [lineupSet] => Array
        (
            [0] => Array
                (
                    [0] => Array
                        (
                            [formula] => Array
                                (
                                    [totalPoints] => 220.66
                                )

                            [name] => arr1-test1
                        )

                    [1] => Array
                        (
                            [formula] => Array
                                (
                                    [totalPoints] => 214.76
                                )

                            [name] => arr0-test0
                        )

                )

        )

)

我想对顶部做同样的事情n最高totalPoints。请记住,有时需要采取n每个项目lineupSet那些是最高的totalPoints.


我认为最好使用一个对象,然后在对数据进行排序时可以保留 max (也可以使用构造函数对数组进行排序)。

Class SortHelper{
    public $max = 0;

    private function checkMax($totalPoints){
        if($totalPoints > $this->max)
            $this->max = $totalPoints;
    }

    private function sum_points($v) {
        $totalPoints = 0;
        foreach ($v['lineupSet'] as $lset) {
            if (isset($lset['formula'])) {
                $totalPoints += $lset['formula']['totalPoints'];
                $this->checkMax($lset['formula']['totalPoints']);
            }
            else {
                foreach ($lset as $l) {
                    $totalPoints += $l['formula']['totalPoints'];
                    $this->checkMax($l['formula']['totalPoints']);
                }
            }
        }
        return $totalPoints;
    }

    private function sort_points($a, $b) {
        return $this->sum_points($b) - $this->sum_points($a);
    }

    public function sort($array){
        usort( $array, [$this, 'sort_points']); 
        return $array;
    }
}

那么你就会:

$sortHelper = new SortHelper();
$sorted_array = $sortHelper->sort($testArray);

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

按最高值对 n 个项目进行多维自定义排序 的相关文章

  • 通过字符串操作预防 PHP SQL 注入[重复]

    这个问题在这里已经有答案了 可能的重复 PHP 中防止 SQL 注入的最佳方法 https stackoverflow com questions 60174 best way to prevent sql injection in php
  • 验证项目是否在开始日期和结束日期内

    我有一个java程序 它将检查每个项目的开始日期和结束日期 每个项目必须有自己特定的开始日期和结束日期范围 如果新的开始日期和结束日期的范围落在旧的开始日期和结束日期内 系统将提示错误消息 例如 Company ABC Item Numbe
  • 如何在 Yii2 应用程序中显示多个选择下拉列表中的选定值?

    我正在研究 Yii2 我正在使用这样的自定义数组创建多个选择下拉菜单 在控制器文件中 all groups Groups find gt where group created by id gt orwhere new Expression
  • Cron 作业的远程地址问题

    我需要获取访问者的IP 但是当cron运行时 它发现REMOTE ADDR是一个未定义的索引 事实上 当文件与 cron 一起运行时 没有远程地址 我该如何避免这个问题 PHP 有没有办法说 如果 REMOTE ADDR 存在则考虑它 如果
  • Symfony/Doctrine 重新排列数据库列

    当我使用doctrine schema update命令行生成表时 Doctrine 或Symfony 似乎想要添加一个命令来重新排列我的列 将键放在它出现的前面 我想知道是否 更希望在哪里 我可以禁用环境的这个 功能 所以当我去生成我的表
  • 将我的 Laravel 连接到外部数据库

    如何将 Laravel 连接到外部数据库 示例 我的本地计算机上有一个 Laravel 它在 xampp 上运行 我希望它连接到云服务器数据库 打开 env文件并编辑它 只需设置正确的外部数据库凭据 DB CONNECTION mysql
  • SQL 查询结果为字符串(或变量)

    是否可以将SQL查询结果输出到一个字符串或变量中 我的php和mysql不好 假设我有数据库 agents 其中包含列 agent id agent fname agent lname agent dept 使用此查询 sql SELECT
  • 如何将一个数组中的所有项目复制到另一个数组中?

    如何将数组的每个元素 其中元素是对象 复制到另一个数组中 以便它们完全独立 我不想更改一个数组中的元素来影响另一个数组 这里的关键是 数组中的条目是对象 并且 您不希望对一个数组中的对象的修改显示在另一个数组中 这意味着我们不仅需要将对象复
  • 按升序对 NSDictionary 进行排序

    我正在尝试排序NSDictionary按升序排列 我正在使用这段代码 NSDictionary valDict self mGetDataDict key rowKey for NSString valueKey in valDict al
  • 如何在 C# 中使用键对 NameValueCollection 进行排序?

    我编写了以下代码 它也有效 但我想知道它们是否比这更好 NameValueCollection optionInfoList if aSorting optionInfoListSorted new nameValueCollection
  • Mac OSX 10.7.4,Xcode 4.4.1,没有 头文件?

    我正在编写一个程序 它将使用 C 标准库的数组容器来保存一些对象 但是 每当我尝试在程序中包含以下代码行时 include
  • 二维数组作为字典的项目

    我想用一个项目的几个属性填充字典 例子 我正在考虑拥有Item 1 and Item 2 as Dictionary键与array这将保留其属性 我需要能够单独访问项目的每个属性 因此将它们连接为一个字符串不是一种选择 我正在考虑类似下面的
  • 如何按元素添加两个 Rust 数组?

    这绝对是一个初学者问题 但我搜索了半个小时后找不到任何有用的东西 我有 Rust 1 7 0 和这段代码 type coord i64 3 add two coordinates vectors pointwise that is if z
  • 如何下载临时文件

    我正在尝试创建一个简短的 PHP 脚本 该脚本采用 JSON 字符串 将其转换为 CSV 格式 使用fputcsv 并使该 CSV 可作为下载的 csv 文件使用 我的想法是使用tmpfile 不用担心 cronjobs 或磁盘空间不足 但
  • 如果数组包含一个或多个相同值,则合并数组

    我有一个数组数组 a 1 2 3 3 4 5 6 7 8 8 9 9 10 我想合并包含一个或多个相同值的所有数组 所以 a 1 2 3 4 5 6 7 8 9 10 我正在努力寻找一种简洁的方法来解决这个问题 有任何想法吗 我相信这是正确
  • 验证 LDAPS 连接的自签名证书

    我想从 Linux Linux 3 2 0 4 amd64 1 SMP Debian 3 2 51 1 x86 64 GNU Linux 客户端到 Windows 2012 服务器建立安全的 ldap 连接 ldaps 以更改活动中的用户密
  • WordPress 子主题包括包含文件

    我在一家WordPress使用 AMPPS 作为本地主机在我的本地计算机上进行设置 使用 Delta 主题 我创建了一个子主题 delta2 child 初始设置效果很好 但是 我需要更改包含文件夹中名为 home slider php 的
  • 无法访问 WordPress 中声明的全局变量

    我有以下代码 g value something print g value function get value global g value print g value print get value 当我在独立的 PHP 脚本中运行它
  • Yii2:无法将列值更新+1

    创建新记录时 我需要将列值更新 1 public function actionCreate model new CreateBookings if model gt load Yii app gt request gt post Yii
  • 通过 Facebook 图 api 点赞帖子

    你好 我对 facebook PHP SDK 没有什么问题 我想通过 facebook PHP SDK 点赞帖子或其他内容 我正在执行此代码 我认为它应该是正确的 但显然它不起作用 给定的错误代码是的 PHP SDK不知道这种POST请求

随机推荐

  • cs107 makefile::找不到-lrssnews

    我想开始从事在线斯坦福 CS107 编程范式课程的第四个作业 即 RSS 搜索器 然而 我在第一步就落后了 我无法编译准备好的 待处理的 未完成的程序 当我输入 make 时出现此错误 gcc rss news search o g Wal
  • 在生产和版本控制同步问题中运行 Strapi

    我想知道在生产中运行 Strapi 的最佳实践是什么 我注意到 当添加内容类型时 Strapi 会生成新文件 这意味着生产环境的文件将与版本控制不同步 有推荐的部署流程吗 在管理中进行更改后 我是否应该将生产中的更改提交到我的 git 存储
  • UICollectionViewCell systemLayoutSizeFittingSize 返回不正确的宽度

    我一直在玩弄动态 UICollectionViewCell 并注意到在 iOS 8 上调用cell contentView systemLayoutSizeFittingSize UILayoutFittingCompressedSize
  • 在某些版本的 Oracle 中,相关子查询是否有嵌套限制?

    这是可以帮助您理解我的问题的代码 create table con content id number create table mat material id number content id number resolution num
  • C# 自动启动自动将应用程序添加到启动文件夹

    C 自动启动是否有可能自动将应用程序添加到启动文件夹 现在我可以下载并安装具有自动启动功能的 C 应用程序 但当我重新启动 Windows 时 应用程序不会自动评级 怎么做 你可以使用它 RegistryKey rkey Registry
  • Android:将图像存储到项目目录(文件)中?

    我想将我的位图图像存储到项目目录中 我如何访问我的项目文件夹或者我的项目文件夹的地址是什么 您必须将图像放入res drawable文件夹 然后 您可以使用以下方式访问它们 R drawable name of image for name
  • 在样式组件 ReactJS 上导入 font-face

    I use styled component用于我的 ReactJS 应用程序上的库 css 我想要 font face但不工作 code on GlobalStyle js import createGlobalStyle from st
  • WPF Datagrid - 强制单行行

    我正在 WPF 中处理数据网格 但遇到了问题 将多行字符串添加到我的 DataGridTextColumn 时 该行的高度会扩展以适合整个文本 我希望行高始终保持不变 即仅显示第一行 有谁知道解决方案吗 似乎是一个足够简单的任务 但我还没有
  • 来自数组 HTML Javascript 的图像

    这是一个基本问题 但我发现的大多数例子都有点过于复杂 我正在尝试创建一组照片 然后仅显示选定的一张 这是我的数组 var imgArray new Array imgArray 0 new Image imgArray 0 src imag
  • 使用 Python 自动填写 Web 浏览器表单

    问题 你好 我是一名初学者 正在尝试学习 Python 这是我的第一个项目我想编写一个脚本来自动填写调查问卷 我熟悉编码 并且我编写的大部分代码都是为了解决这个问题 我正在努力编写一个方法 该方法将点击问题 1中的按钮 1 或者按下任何给定
  • 我的 Android 应用程序中由 Theme.AppCompat 引起的 IllegalStateException

    当我尝试启动该应用程序时 出现 NPE 我不知道是什么原因造成的 该应用程序应在网站上显示地图 然后用户可以轻松地将他的位置输入到编辑文本中并将其提交到网页 这是我的代码 package com timbremer iimv import
  • 如何使用jquery在标题属性中添加换行符

    请在下面找到我的代码 该代码将鼠标悬停事件的工具提示添加到我的调查引擎中的字段中 我想要实现的是在工具提示中添加换行符 任何帮助是极大的赞赏 var j jQuery noConflict j choice31QID405 mouseove
  • 标准机器学习中的部分总和?

    我是函数式编程的新手 我有一项任务来计算列表的部分和 例如 psum 1 1 1 1 1 val it 1 2 3 4 5 整数列表 这是到目前为止我的代码 然而 在函数 psum2 L 中 我不知道如何遍历每个值并将它们相加 所以我只是打
  • C++:检查括号和方括号在字符串中是否平衡(逻辑问题)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 检查字符串中的每个 是否都满足 或 检查字符串中的每个 是否与 或 匹配 例如 您永远不能拥有像这样的字符串 a a a a a 但是
  • 创建和连接 SQL Server 数据库的代码:有什么问题吗?

    我是 C 新手 或者我正在尝试以编程方式创建和打开 SQL Server 数据库 我有一个正在创建的 ASP NET Web 应用程序 在页面加载时它应该从数据库中提取一些数据 如果数据库不存在 则应该创建它并使用默认数据填充 PS C 的
  • 如何使用 Angular2 路由

    我正在尝试编写一个单页应用程序 但无法使路由正常工作 我尝试使用许多教程 但考虑到 Angular2 仍处于测试阶段 它们似乎很快就过时了 似乎只要我添加对路由器指令或路由器配置或路由器提供程序的任何引用 该应用程序就会停止工作 并且浏览器
  • 虚拟内存的最大大小可以是多少?

    我看到这个问题 虚拟内存 和 交换空间 有什么区别 https stackoverflow com questions 4970421 difference between virtual memory and swap space 这里提
  • Python - 列出函数值的组合对

    我有四个坐标的组合 我试图找到每个坐标之间的距离 我已经能够完成此操作 但是我无法让我的程序列出与每个距离相对应的坐标对 import itertools import math point1 1 1 0 5 point2 3 3 1 po
  • Android 按钮以 Java(而非 XML)编程方式显示状态

    如何为 state pressed 定义 Android 按钮图像 Java 中的 android state focused 例如 如何在 Java 中完成对来自 XML 的等效操作 http developer android com
  • 按最高值对 n 个项目进行多维自定义排序

    我目前可以使用自定义排序方法对多维数组进行排序 每个数组lineupSet has an n物品数量 功能sort points将对每个进行排序lineupSet从最高到最低totalPoints然后它会给我lineupSet总数最高tot