PHP Sort 函数用于对对象数组进行排序

2024-02-09

我有一个充满同一类对象的数组。例如,我想通过可选对象字段对该数组进行排序$case->ID or $case->Sender

是否有内置的 array_sort() 函数可以执行此操作,或者我必须自己编写此排序函数?

答案不必详细解释 - 这更像是/否问题

Thanks


我对 usort 的失败尝试:

function sortBy($sort)
  {
   usort($this->abuseCases, function($a, $b) {
     if($a->{$sort} > $b->{$sort}) return 1;
     if($a->{$sort} < $b->{$sort}) return -1;
     else return 0;
    });
  }

又一次失败的尝试:

    function sortBy($sort)
    {
        $this->sortBy = $sort;

        usort($this->abuseCases, array("this", "srt"));
    }

    private function srt($a, $b)
    {
        if($a->{$this->sortBy} > $b->{$this->sortBy}) return 1;
        if($a->{$this->sortBy} < $b->{$this->sortBy}) return -1;
        else return 0;
    }

编辑凹凸


您不仅可以使用匿名函数,还可以使用闭包,例如

function ($a,$b) use ($sort) { ... }

并且 $sort 将在函数体中可用。 独立的示例:

<?php
function getFn($sort) {
  return function($a, $b) use($sort) {
    if($a->$sort > $b->$sort) return 1;
    if($a->$sort < $b->$sort) return -1;
    return 0;
  };
}

$abuseCases = array(
  (object)array('ID'=>1, 'Sender'=>'Sender A'),
  (object)array('ID'=>3, 'Sender'=>'Sender D'),
  (object)array('ID'=>2, 'Sender'=>'Sender C'),
  (object)array('ID'=>4, 'Sender'=>'Sender B')
);

echo "\n----- Sort By Sender ----\n";
usort($abuseCases, getFn('Sender'));
foo($abuseCases);

echo "\n----- Sort By ID ----\n";
usort($abuseCases, getFn('ID'));
foo($abuseCases);

function foo($a) {
  foreach($a as $o) {
    echo $o->ID, ' ', $o->Sender, "\n";
  }
}

prints

----- Sort By Sender ----
1 Sender A
4 Sender B
2 Sender C
3 Sender D

----- Sort By ID ----
1 Sender A
2 Sender C
3 Sender D
4 Sender B

Update:在 phpcallable。从 php 5.3 开始,它可以是一个匿名函数,但它也可以是一个函数的名称......或者一个对象和一个作为数组传递的方法名称,例如array($obj, 'methodName').

$abuseCases = getData();
echo "\n----- Sort By Sender ----\n";
usort($abuseCases, array(new Foo('Sender'), 'compare'));
foo($abuseCases);

echo "\n----- Sort By ID ----\n";
usort($abuseCases, array(new Foo('ID'), 'compare'));
foo($abuseCases);

class Foo {
  public $propName; // protected?
  public function __construct($propertyName) {
    $this->propName = $propertyName;
  }
  public function compare($a, $b) {
    $prop = $this->propName;
    if($a->$prop > $b->$prop) return 1;
    if($a->$prop < $b->$prop) return -1;
    return 0;
  }
}

function foo($a) {
  foreach($a as $o) {
    echo $o->ID, ' ', $o->Sender, "\n";
  }
}
function getData() {
  return array(
    (object)array('ID'=>1, 'Sender'=>'Sender A'),
    (object)array('ID'=>3, 'Sender'=>'Sender D'),
    (object)array('ID'=>2, 'Sender'=>'Sender C'),
    (object)array('ID'=>4, 'Sender'=>'Sender B')
  );
}

(如果你大量使用这个 - 或者不想写这样的借口 -_- - 你可能想定义一个像这样的接口interface Comparator { ... },让 Foo 实现该接口并拥有一些使用 Comparator 的函数/类,即 usort() 周围对象的包装器。)

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

PHP Sort 函数用于对对象数组进行排序 的相关文章

  • Laravel 集合 .each() + array_push

    需要有关 Laravel 上 each 方法内的 array push 的帮助 我无法在此代码上获取容器数组 imagesData array collect data images gt each function v k use ima
  • 如何以 Magento 方式实现库存过滤器?

    在我的 magento 网站上可以看到缺货的产品 我想要在分层导航中添加一个自定义过滤器 其中显示 排除缺货 当客户单击它时 应该隐藏缺货产品 默认情况下 我在 系统 gt 配置 gt 目录 gt 库存 下启用显示 显示缺货产品 即我希望客
  • 如何在 Laravel 中创建一条包罗万象的路线

    我需要一个 Laravelroutes php将捕获所有流量到特定的条目example com premium section网站 以便我可以提示人们在访问优质内容之前成为会员 您还可以通过在参数上使用正则表达式来捕获 全部 Route g
  • 使用 PDO 准备语句使用搜索字段中的多个关键字进行 LIKE 查询

    网站用户使用搜索表单来查询产品数据库 输入的关键字在数据库中搜索产品的标题 public function startSearch keywords keywords preg split s keywords totalKeywords
  • PMA 4.5.2.0 file_exists():open_basedir 限制生效

    从 PPA 在我的 Ubuntu 服务器上安装 phpMyAdmin 后 https launchpad net nijel archive ubuntu phpmyadmin https launchpad net nijel archi
  • 从 .NET 文本中提取关键字

    我需要计算每个关键字在字符串中重复出现的次数 并按最高次数排序 NET 代码中用于此目的的最快算法是什么 编辑 下面的代码将唯一标记与计数分组 string target src Split new char var results tar
  • 如何比较两个字符串的大小写和变音符号不敏感?

    我有两根弦 字符串 1 塞巴斯蒂安 字符串 2 塞巴斯蒂安 我想通过忽略 重音 字符来比较这两个字符串 谁能知道这个逻辑吗 提前致谢
  • PHP:如何防止不必要的换行

    我正在使用 PHP 创建一些基本的 HTML 标签始终相同 但实际链接 标题对应于 PHP 变量 string p a href strong i title i i strong a br echo string fwrite outfi
  • CSS 无法与 CodeIgniter 一起使用

    这是我的 CI 代码的一部分 class page extends CI Controller var Page public function construct parent construct this gt Page 1 this
  • PHP/MySQL:如何在网站中创建评论部分[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我不会问 如何使用 PHP MySQ
  • PHP 相等变量

    我想知道是否有任何方法可以检查大量变量是否相等 如果我只有几个变量 我可以这样做 if a b a c b c 但是 如果我有 20 个变量 则需要一些时间来编写所有组合 还有其他方法吗 if count array unique arra
  • 如何使用批处理文件实现快速排序?

    虽然通常情况下 为工作选择正确的语言是件好事 但有时尝试用一种非常不合适的语言做一些事情可能会很有启发 它可以帮助您更好地理解问题 也许你不知道have按照您认为的方式解决它 它可以帮助您更好地理解该语言 也许它支持的功能比您想象的还要多
  • 根据通过 AJAX 请求的用户输入重绘 google 图表

    我有一个谷歌图表从我的数据库中提取数据 它可以按我想要的方式工作 根据 URL 中的 get 请求 它从所选表中提取数据 我想根据下拉菜单中选定的表通过 ajax 更新此图表 我无法突破的部分是通过 ajax 获取数据响应 我认为下面的代码
  • 数据表 - 服务器端处理 - 数据库列合并

    我目前正在使用 DataTables 1 10 5 服务器端处理功能 http www datatables net examples data sources server side html http www datatables ne
  • PHP mkdir() 和 fopen() 不起作用 - 权限问题? umask问题?

    以下 PHP 脚本无法创建目录 它也将无法创建文件 当目录已经存在时 ini set error reporting E ALL define ABSPATH SERVER DOCUMENT ROOT echo ABSPATH br br
  • 如何在 Laravel 代码中使用 Artisan 命令?

    如何在我的 php caode Ex 中使用 Artisan 命令行 php artisan version to 您可以从控制器调用 Artisan 命令 如下所示 calling of migrate install Artisan c
  • PHP 日志文件颜色

    我正在编写一个 PHP 日志文件类 但我想为写入文件的行添加颜色 我遇到的问题是颜色也会改变终端的颜色 我想要实现的是仅更改写入日志文件的行的颜色 class logClass extends Singleton private funct
  • laravel 5.4 在请求验证之前修改数据[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我有我的自定义请求 它扩展了 Backpack CrudController 现在我想重写 ValidatesWhenResolv
  • Laravel 8、Sanctum、Fortify /logout 在 Postman 中抛出“CSRF 令牌不匹配”

    我安装了 L8 Sanctum 和 Fortify 进行身份验证 我以前可以 login 使用了Pre request Script设置X XSRF TOKEN 我什至得到了 api user成功地 但当我这样做时 logout 我在 Po
  • 如何使用 PHP 获取列中的所有值?

    我一直在到处寻找这个问题 但仍然找不到解决方案 如何从 mySQL 列中获取所有值并将它们存储在数组中 例如 表名称 客户 列名称 ID 名称 行数 5 我想获取此表中所有 5 个名称的数组 我该如何去做呢 我正在使用 PHP 我试图 SE

随机推荐

  • Python:更正时间戳中的本地时间

    Using https gist github com jordan brough 4007432 https gist github com jordan brough 4007432我有一个在 Sublime 中工作的时间戳 但时间晚了
  • 从 Java Servlet 向 Web API 发送 get 请求

    常见问题 是否可以从 Java servlet 发送 get 请求doGet方法 我需要根据我的 Web API NET 服务检查一些 票据 因此我可以从我的自定义 servlet 中调用此服务吗 doGet方法 public class
  • h5py:正确读取 MATLAB 中存储的“表”类的问题 (.mat -7.3)

    我正在尝试使用 h5py 模块在 Python 3 8 中导入 MATLAB mat 7 3 文件 该文件包含一个结构类和table班级 我成功导入了结构类对象 但是 那table导入后类显示错误的尺寸 import h5py Path d
  • django - 在选择上发布表单

    我制作了一个简单的 django 表单 其中包含一个选择列表 在单选按钮中 class MyForm forms Form choices forms ChoiceField widget forms RadioSelect choices
  • RESTful 服务认证

    根据 REST 规范 服务应该是无状态的 但随后就很难启用身份验证 我读过的一些东西说 让 REST 有状态并不是世界末日 但这不是重点 重点是遵循规范并保持一致 所以 我在这里问这个问题 希望有人能引导我走向正确的方向 我正在使用 Spr
  • 向现有 MongoDB 文档添加字段(在 Node.js 中使用 Mongoose)

    我在集合中有这个现有文档Article在 MongoDB 数据库中 site www atlantico fr date 2014 05 27T11 10 19 000Z link http www atlantico fr example
  • 如何从 SQLite android 中的表中删除行? [复制]

    这个问题在这里已经有答案了 我已经这样做了 但它不起作用 我正进入 状态force close public boolean favoriteDelete int id return database delete FavoriteData
  • 在 C++ main() 执行之前处理 Mac OS X 文件打开事件

    我用谷歌搜索了很多 但仍然找不到好的解决方案 因此 我将一个复杂的 Qt5 应用程序 某些网络服务的客户端 移植到 Mac OS X 10 7 0 Lion 及更高版本 我需要处理自定义文件 例如 xyz和自定义 URL 方案 例如xyz
  • zsh:在目录分隔符上停止向后杀字

    In zsh http www zsh org 我如何设置行编辑器 以便backward kill word停在目录分隔符上 目前在我的 bash 设置中 如果我输入 cd devel sandbox 然后打C w点将紧随其后devel 在
  • 模型工厂中的 Laravel 5.1 外键

    如何在模型工厂中定义外键 例如 如果我有一个组织表 其中包含国家 地区表的外键 则在我的模型工厂中 我必须为国家 地区 ID 定义一个虚拟值 如下所示 factory gt define App Organisation class fun
  • 为什么这个类/实例变量没有被初始化?

    我正在尝试使用 gnu smalltalk 在以下带有变量的简单类的代码中 我发现它没有初始化为给定值 Object subclass Myclass mainval mainval 555 getmainval mainval gc My
  • Hibernate - 具有排序顺序的多列索引

    我有以下代码 Table appliesTo MyTable indexes Index name MultipleColumnsIndex columnNames column1 columns2 注意 这是 Hibernate 表 通过
  • 有效筛选唯一值的数据 (Python)

    我有一个由 X Y Z A 值组成的 2D Numpy 数组 其中 X Y Z 是 3D 空间中的笛卡尔坐标 A 是该位置的某个值 举个例子 X Y Z A 13 7 21 1 5 9 2 7 0 5 15 3 9 1 1 13 7 21
  • 将列表应用于输出数据帧的函数

    我的单参数函数输出一个数据帧 library tidyverse myfun lt function x mtcars gt filter x gt group by cyl gt summarise mean disp mean drat
  • 如何在 Swift 中创建 _inline_ 递归闭包? [复制]

    这个问题在这里已经有答案了 对于 Swift 中的全局函数来说 递归是微不足道的 例如 func f f 但是 闭包不能引用自身 例如 var f Void gt Void f 产生以下错误 Variable used within its
  • 如何处理 jQuery 中的表单更改?

    在 jQuery 中 有没有一种简单的方法来测试是否any表单的元素发生了变化 假设我有一个表单和一个带有以下内容的按钮click event mybutton click function Here is where is need to
  • 如何从烂番茄上抓取一页以上的评论?

    我一直在使用这个抓取工具来抓取此网址的评论家评论 https www rottentomatoes com m avengers endgame reviews https www rottentomatoes com m avengers
  • java-8 过滤列表而不创建新列表

    我正在寻找使用简单的 lambda 来过滤 Java 8 中的列表的最干净的方法Predicate 无需创建新列表 特别是 该解决方案不合适 因为toList 返回一个新的List List
  • 回滚 Laravel 中的一项特定迁移

    I want 仅回滚 Rolled back 2015 05 15 195423 alter table web directories I run php artisan migrate rollback 我的 3 个迁移正在回滚 Rol
  • PHP Sort 函数用于对对象数组进行排序

    我有一个充满同一类对象的数组 例如 我想通过可选对象字段对该数组进行排序 case gt ID or case gt Sender 是否有内置的 array sort 函数可以执行此操作 或者我必须自己编写此排序函数 答案不必详细解释 这更