将 array_multisort() 与自定义函数一起使用[关闭]

2023-11-30

我有以下数组,我想根据另一个数组对其进行排序,而不是DESC or ASC

$array = array(
    'note' => array('test', 'test1', 'test2', 'test3', 'test4'),
    'year' => array('2011','2010', '2012', '2009', '2010'),
    'type' => array('journal', 'conference', 'conference', 'conference','conference'),
);

是否可以使用 array_multisort() 内的自定义函数来完成此操作?

例如:

array_multisort($array['type'], $array['year'], custom_function, $array['note']);

代替:

array_multisort($array['type'], $array['year'], SORT_ASC, $array['note']);

如果您知道数组的深度,您可以简单地应用usort对每个要排序的数组元素。

这是根据自定义数组排序的示例:

<?php
$order = array(
    'first',
    'second',
    'third',
    'fourth',
    'fifth'
);

$array = array(
    array(
        'second',
        'fourth',
        'first',
        'third'
    ),
    array(
        'second',
        'first'
    )
);

foreach($array as &$value) {
    usort($value, function($a, $b) use($order) {
        return array_search($a, $order) > array_search($b, $order);
    });
}
unset($value);

var_dump($array);
/*
array(2) {
  [0]=>
  array(4) {
    [0]=>
    string(5) "first"
    [1]=>
    string(6) "second"
    [2]=>
    string(5) "third"
    [3]=>
    string(6) "fourth"
  }
  [1]=>
  array(2) {
    [0]=>
    string(5) "first"
    [1]=>
    string(6) "second"
  }
}
*/

如果您不知道数组可以有多深,我想到的唯一解决方案是递归函数:

<?php
$order = array(
    'first',
    'second',
    'third',
    'fourth',
    'fifth'
);

$array = array(
    array(
        'second',
        'fourth',
        'first',
        'third'
    ),
    array(
        array('second', 'first'),
        array('fourth', 'third')
    )
);

function custom_multisort($array, $order) {
    foreach($array as &$value) {
        if(is_array($value[0])) {
            $value = custom_multisort($value, $order);
        } else {
            usort($value, function($a, $b) use($order) {
                return array_search($a, $order) > array_search($b, $order);
            });
        }
    }
    return $array;
}

$array = custom_multisort($array, $order);

var_dump($array);
/*
array(2) {
  [0]=>
  array(4) {
    [0]=>
    string(5) "first"
    [1]=>
    string(6) "second"
    [2]=>
    string(5) "third"
    [3]=>
    string(6) "fourth"
  }
  [1]=>
  array(2) {
    [0]=>
    array(2) {
      [0]=>
      string(5) "first"
      [1]=>
      string(6) "second"
    }
    [1]=>
    array(2) {
      [0]=>
      string(5) "third"
      [1]=>
      string(6) "fourth"
    }
  }
}
*/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 array_multisort() 与自定义函数一起使用[关闭] 的相关文章

  • 单词之间没有空格的语言(例如亚洲语言)中的断词?

    我想让 MySQL 全文搜索适用于日语和中文文本以及任何其他语言 问题在于这些语言以及可能其他语言通常在单词之间没有空格 当您必须键入与文本中相同的句子时 搜索没有用 我不能只在每个字符之间添加空格 因为英语也必须有效 我想用 PHP 或
  • 如何使用 phpunit 运行单个测试方法?

    我正在努力运行一个名为testSaveAndDrop在文件中escalation EscalationGroupTest php with phpunit 我尝试了以下组合 phpunit EscalationGroupTest escal
  • 在 php 中为类自动生成 getter 和 setter 的最佳方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我经常创建一个包含一些私有变量的类 当设置此类的实例时 应该可以使用 getter 和 setter 填充该类的所有变量 有没有一种简单的方法可
  • 生成大随机数 php [重复]

    这个问题在这里已经有答案了 我想使用 PHP 生成一个包含 75 个字符的数字 我到处寻找 但一无所获 除了这个 http dailycoding com tools RandomNumber aspx http dailycoding c
  • Android:如何在播放媒体(mp3)时在特定毫秒内显示文本

    我正在尝试做一个类似卡拉 OK 的应用程序 我想在某一毫秒到来时显示一个或多个单词 例如 1148 毫秒 gt 打印 尼古拉斯 1826 毫秒 gt 打印 是 2766 毫秒 gt 打印 旧 ms gt 显示 这是我的代码 包 com ex
  • FPDI/FPDF:水印和打印多页

    我修改了这个堆栈问题 当用户尝试下载文件时在 pdf 文件上应用水印 https stackoverflow com questions 3983432 applying watermarks on pdf files when users
  • 如何在响应ajax codeigniter后停止执行其他控制器

    我想知道如何在响应输出 json 数据后停止执行函数和涉及的其他控制器 就我这里的情况而言 我只是打电话test 函数于dashboard控制器 In dashboard构造函数将执行MY Login library In MY Login
  • 检查 PHP 中“@”字符后面的单词

    我现在正在制作一个新闻和评论系统 但是我已经在一个部分上停留了一段时间了 我希望用户能够在 Twitter 上引用其他玩家的风格 例如 用户名 该脚本看起来像这样 不是真正的 PHP 只是想象脚本 3 string I loved the
  • Woocommerce 让产品显示在存档页面中

    我正在尝试让所有产品显示在我商店的存档页面中 我想知道他们的id我正在使用我的一个钩子 它在 wp head 上运行并检查 if is product category 我想以某种方式访问 产品的查询并获取它们的 ID if is prod
  • PHP严格标准:声明应该兼容

    我有以下类层次结构 class O Base class O extends O Base abstract class A Abstract public function save O Base obj class A extends
  • 将“php”作为 shell 脚本执行时的自定义 php.ini 文件

    我在跑php作为 shell 脚本 我不确定 shell脚本 是否正确 该文件以 usr bin php 这很好用 但 MongoDB 类没有正确加载php ini文件 具有extension mongo so 未使用 我该如何使用它tha
  • 使用 preg_replace 仅替换第一个匹配项

    我有一个结构类似于以下的字符串 aba aaa cba sbd dga gad aaa cbz 该字符串每次都可能有点不同 因为它来自外部源 我只想替换第一次出现的 aaa 但其他人则不然 是否可以 可选的第四个参数预替换 http php
  • 学说迁移后备

    我们正在使用原则迁移 当迁移包含多个操作并且其中一个操作失败时 通常会出现问题 例如 如果迁移添加了 5 个外键 其中第 5 个失败 而字段长度不同 则修复字段错误并重新生成迁移不会not修复整个问题 而现在出现一个与 4 个密钥已存在有关
  • 从 .phar 存档中提取文件

    对于 Phar 文件 我完全错过了一些东西 我正在安装一个需要 phpunit pdepend 和其他依赖项的项目 我将它们作为 phar 文件获取 但是 我无法使用命令行工具 php 命令 从中提取文件 我用谷歌搜索了这个问题 但没有发现
  • 如何实现n个元素的查找和插入操作的动态二分查找

    这个想法是使用多个数组 每个长度为 2 k 根据 n 的二进制表示来存储 n 个元素 每个数组都是排序的 不同的数组没有以任何方式排序 在上述数据结构中 SEARCH是通过对每个数组进行一系列二分查找来进行的 INSERT 是通过一系列相同
  • MySQL 追加字符串

    How can I append a string to the end of an existing table value Let s say I have the table below And let s say that Mari
  • 表单计算器脚本基本价格未加载 OnLoad

    我的表单中有一个计算器来计算我的下拉选项选择 function select calculate on change calc input type checkbox calculate on click calc function cal
  • 如何在 PHP 中从 IP 地址/国家/地区名称查找时区 ID?

    谁能告诉我 PHP 中是否有任何方法可以从 IP 地址或国家 地区名称获取时区区域 例如 亚洲 加尔各答 描述 我正在尝试根据他 她的国家 地区设置用户时区 我从他的 IP 地址获取用户所在国家 地区 但我需要该国家 地区的时区区域 例如
  • 使用正则表达式提取两个短语之间的所有单词[重复]

    这个问题在这里已经有答案了 我正在尝试使用以下正则表达式提取两个短语之间的所有单词 b item W w W 0 2 1 one W w W 0 3 business b b item W w W 0 2 3 three W w W 0 3
  • 对具有混合类型值的数组进行数字排序

    我有一个像这样的混合数组 fruits array lemon Lemon 20 banana apple 121 40 50 然后申请sort 其功能如下 sort fruits SORT NUMERIC foreach fruits a

随机推荐

  • 编码返回“未知”

    对于这个例子 http pastebin com QyebfD1pz3 和 cvc4 返回 未知 作为 check sat 的结果 两者对于原因都不是很详细 有没有办法让 z3 关于其执行更加详细 你的脚本使用了这个策略 s Then si
  • IE6 中的 event.currentTarget

    我有一个事件处理程序 我将其附加到一个元素以捕获冒泡的单击事件 我需要一个reliable获取元素的方法caught事件 而不是触发它的元素 该特定元素高于 srcElement target 的级别数量是任意的 因此使用 ParentNo
  • 使用 WebServiceTemplate 设置自定义标头

    我在 Spring Boot 中使用 WebServiceTemplate 并使用 marshalSendAndReceive 调用目标服务 如何在请求中设置自定义 HTTP 标头 您需要使用 WebServiceMessageCallba
  • 在 dropwizard 中运行异步作业并轮询其状态

    在 dropwizard 中 我需要实现异步作业并轮询它们的状态 我在资源中有两个端点 Path jobs Component public class MyController POST Produces MediaType APPLIC
  • 在 mac 中安装 PHP INTL 不正确

    我已经安装了php56 intl using Homebrew像这样 brew install php56 intl当我这样做时php m grep intl它给了我intl 但是当我检查我的phpinfo 文件 不显示intl 不知道我错
  • 导致 JavaFX 2.0 中 TableView 不响应鼠标单击

    我想要一个 JavaFX 2 0 TableView 但我不希望它响应鼠标单击 当然 我可以禁用控件 小部件 但它会显示为禁用 tableview setSelectionModel null 给出了我想要的行为 但 UI 转储了抱怨 nu
  • 在 Flex 中的组件之间共享数据的最佳方式是什么?

    我正在为新工作开发一个 Flex 应用程序 这有点像一个训练轮应用程序 我正在学习这门语言 这不是一个需要与服务对话才能完成工作的应用程序 整个应用程序中有一些组合框实例共享相同的一组可能值 例如 选择状态 进行中 拒绝 完成 我希望它们使
  • 使用 Indy 发布并且文件名包含希腊字符时文件上传失败

    我正在尝试实施一个POST到网络服务 我需要发送一个类型为可变的文件 docx pdf txt 以及 JSON 格式的字符串 我已成功使用类似于以下的代码成功发布文件 procedure DoRequest var Http TIdHTTP
  • 使用 python xml.sax 解析 XML 实体

    使用 xml sax 使用 python 解析 XML 但我的代码无法捕获实体 为什么skippedEntity 或resolveEntity 不报告以下内容 import os import cStringIO import xml sa
  • 如何让mysql接受外部连接

    我有一个 VPS 我想让 mysql DB 接受外部连接 例如从我的电脑 我在服务器上安装了 Debian Linux 我上网查了一些教程 他们说要注释掉 bind address 127 0 0 1 但这似乎没有帮助 VPS 有什么特别的
  • 系统上未安装语音或当前安全设置中没有可用的语音

    尝试使用 SpeechSynthesizer 在 C 上创建 wav 文件时 IIS 服务器出现异常 当应用程序无法访问语音供 SpeechSynthesizer 使用时 会导致此错误 第一个可能的原因是系统上缺少任何已安装的语音 很可能这
  • yii 中 utf8 字符和 htmlspecialchars 错误

    我在 yii 中的字符编码有问题 如果我创建一个新的网络应用程序 Yii framework framework yiic webapp MyTest 然后转到 protected views layouts main php 并将页脚更改
  • Linux下C语言清除串口数据?

    我正在测试发送和接收程序 代码如下 main 函数如下 include lib h int fd int initport int fd struct termios options Get the current options for
  • C++ 变暖 std 向量

    为什么第二次填充 std vector 更快 即使从一开始就预留了空间 int total 1000000 struct BaseClass float m 16 int id BaseClass int id id id int main
  • Laravel 5.7 电子邮件验证路由

    Laravel 5 7 添加了电子邮件验证功能 但在我的项目中 我不使用默认的路由名称 而是出于自己的目的添加了前缀 现在 当我添加以下代码来添加验证路由时 它显示错误 Auth routes verify gt true 错误消息表明ve
  • Python下载文件

    我不确定该怎么做 一种方法是 import urllib request urllib request urlretrieve www example com file tar file tar 另一种方法是 import urllib r
  • 调用原生 Javascript 类型的方法,无需使用 () 包装

    在 Javascript 中 我们可以直接调用字符串文字上的方法 而无需将其括在圆括号内 但不适用于其他类型 例如数字或函 数 这是一个语法错误 但是 Javascript 词法分析器需要将这些其他类型括在圆括号中是否有原因 例如 如果我们
  • 这个承诺看起来正确吗?

    这似乎应该将数据传递到我的范围 但事实并非如此 下面的代码是否有任何直接跳出的错误 angular module Lunch services factory LunchMates q http gt LunchMates getLunch
  • 如何在 PHP 中使用 scandir 只获取图像?

    有没有办法只获取带有扩展名的图像jpeg png gif使用时等 dir tmp files1 scandir dir 您可以使用glob images glob tmp jpeg gif png GLOB BRACE 如果您需要不区分大小
  • 将 array_multisort() 与自定义函数一起使用[关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我有以下数组 我想根据另一个数组对其进行排序 而不是DESC or ASC array array note gt array test test1 test2 test3 test4