使用 php 创建转置矩阵 [重复]

2023-11-23

例如,如果矩阵是:

1 2
3 4
5 6

那么上面矩阵的转置将是:

1 3 5
2 4 6

这是我当前的代码:

<?php

    // transpose matrix
    $trans = array(
        array(1, 2),
        array(3, 4),
        array(5, 6)
    );

    foreach ($trans as $key => $val){
        foreach ($trans[$key] as $k => $v){
            echo $v;
        }
    }

?>

有一种奇怪的 PHP 方法来转置二维数组:

$trans = array(
    array(1, 2),
    array(3, 4),
    array(5, 6)
);

array_unshift($trans, null);
$trans = call_user_func_array('array_map', $trans);
var_dump($trans);

Demo

EDIT使用 PHP 5.6 数组解包的更简单方法

随着 PHP 5.6 中数组参数解包功能的引入,我们可以进一步简化:

$trans = array(
    array(1, 2),
    array(3, 4),
    array(5, 6)
);

$trans = array_map(null, ...$trans);
var_dump($trans);

EDIT解释

引用自 PHP 文档array_map() 函数:

该函数的一个有趣的用途是构造一个数组的数组,可以通过使用 NULL 作为回调函数的名称来轻松执行此操作

(有关其作用的示例,请参阅该文档页面中的示例 #4)

The array_unshift($trans, null)我们首先执行的是提供 NULL 回调,并且我们使用call_user_func_array()因为我们不一定知道我们的值中有多少$trans大批。我们正在用它做什么call_user_func_array()相当于:

$trans = array_map(NULL, $trans[0], $trans[1], $trans[2]);

对于您的示例数组,因为二维数组的顶层具有三个元素(键 0、1 和 2)。

实际上,这个 NULL 回调并行循环遍历所有数组,依次从它们中获取每个值来构建一个新数组:

$maxArraySize = max(count($array[0], $array[1], $array[2]);
// $maxArraySize will have a value of 2 in your case,
//     because your sub-arrays are all equal size
$newArray = [];
for($i = 0; $i < $maxArraySize; ++$i) {
    $tmpArray = [];
    $tmpArray[] = $array[0][$i];
    $tmpArray[] = $array[1][$i];
    $tmpArray[] = $array[2][$i];
    $newArray[] = $tmpArray[];
}

那里有一些额外的检查

  • 它不关心你的数组是关联的还是在任一维度中枚举的,因为它访问$i第一个元素,而不是索引
  • 如果子数组的长度不一样,那么它会有效地用空值填充较短的子数组,以匹配最长的子数组的长度
  • 无论您传入多少个数组,它都会并行处理它们
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 php 创建转置矩阵 [重复] 的相关文章

  • 如何使用 CNContacts 快速获取手机号码?

    我有一些代码可以检索用户联系人中的所有电话号码 但只想过滤掉手机号码 目前 我只是通过将第一个数字为 或第二个数字为 7 的数字添加到数组中来实现此目的 如下所示 func findContacts gt CNContact let key
  • 如何使用 PHP 构建正确的 SOAP 请求

    我需要格式化 构建此 SOAP 服务 的请求 http api notificationmessaging com NMSOAP NotificationService wsdl http api notificationmessaging
  • PHP WCF 集成

    是不是如果我想支持php客户端访问我的服务 我必须有一个基本的http端点 这是因为php仍然只支持soap 1 1吗 据我所知 自从我使用 PHP 以来已经两年了 情况仍然如此 如果客户端应用程序将使用 PHP 的内置 SoapClien
  • 在哪里可以学习网络编程从入门到精通? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我尝试做教程 但它是无组织且无结构的 我在哪里可以学习 PHP 从初学者到大师 我正在寻找类似的网站w
  • C# 和匿名对象数组

    这样的表达是什么意思呢 obj DataSource new new Text Silverlight Count 10 Link Tags Silverlight new Text IIS 7 Count 11 Link http iis
  • 使用 PHP glob 列出 FTP 服务器上的文件不起作用

    我使用此代码来访问目录 location files pictures glob location png 我想使用 FTP 访问远程路径 location opendir ftp user password host name files
  • 在哪里可以获得 PHP 5.3+ 的 runkit DLL 扩展?

    这是一个简单的问题 我在哪里可以获得 PHP 5 3 版本的 runkit 扩展 它的手册 http php net manual en book runkit php http php net manual en book runkit
  • 覆盖 FOS 用户包中的“更改密码”模板

    我做了一些研究 遗憾的是找不到任何帮助 因此 我将 FOSUserBundle ChangePasswordAction 渲染到我的模板中 但它显示供应商提供的默认模板 我的渲染控制器的模板 block body h2 Einstellun
  • Facebook PHP-SDK 页面刷新后似乎丢失了 userID

    我似乎登录工作正常 我可以登录 接受应用程序 第一次 然后显示用户信息 例如姓名 图片 等 然而 当我刷新页面时 userid 又回到 0 我必须再次登录 我不确定问题是什么 我必须在每次页面加载时重新启动它还是什么 我不知道 我会发布一些
  • Facebook API sdk 4.0 - 将照片发布到 Facebook

    我正在尝试创建一个应用程序 用户可以在其中浏览照片并将其从计算机提交到 Facebook 为此 他们首先必须将照片上传到服务器 然后使用 Facebook 请求将此图像发布到 Facebook 我正在使用多部分 表单数据 这就是我到目前为止
  • 通过互联网IP地址从一台计算机访问xampp到另一台计算机

    我试图从另一台计算机访问我的 xampp 它显示为禁止错误 然后我在 google 上搜索答案 因为他们告诉在 apache 文件夹中的 httpd conf 文件中更改一些设置 如下所示 Order Deny Allow Deny fro
  • 如何在codeigniter中将上传图片比例限制为16:9?

    这是我用来上传图像的代码 this gt load gt library upload ext pathinfo file name PATHINFO EXTENSION img name now ext imgConfig upload
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • PHP 检查当前日期是在设定日期之前还是之后

    我从数据库中提取一个日期 其格式为 dd mm YYYY 我想做的是检查当前日期 如果当前日期早于数据库中的日期 则需要打印数据库日期 如果是在之后 则需要打印 继续 有人能指出我正确的方向吗 if strtotime database d
  • 雄辩的第一个 where 子句

    我想知道 Laravel 如何实现雄辩的语法 以便可以静态调用第一个 where 子句User where User where id 23 gt where email email gt first 他们有吗public static f
  • PHP 表单 - 带验证蜜罐

    我有以下内容 效果很好 但对垃圾邮件机器人开放 我想放入蜜罐 而不是验证码 下面的代码适用于验证姓名 电子邮件 消息 但我无法让它与蜜罐一起工作 任何人都可以查看 蜜罐 代码并告诉我如何修复它吗 我希望表单给出 success2 不允许垃圾
  • 在本地 SDK 服务器上工作时,实时 Google App Engine 上出现 404

    我已经在GAE标准环境上部署了几个PHP应用程序 一切正常 现在我正在部署一个新应用程序 该应用程序位于由gcloudSDK按预期工作 终端命令 dev appserver py log level warning app yaml 问题是
  • 如何在 PHP 5.6 中通过 php.ini 设置“verify_peer_name=false”SSL 上下文选项

    案例 我想打开 SSL 连接localhost而 SSL 证书是 FQDN 的问题 问题 没有进行特殊处理就行 下面的程序失败并显示以下消息 PHP Warning stream socket enable crypto Peer cert
  • 如何计算 3D 坐标的线性索引,反之亦然?

    如果我有一个点 x y z 如何找到该点的线性索引 i 我的编号方案是 0 0 0 是 0 1 0 0 是 1 0 1 0 是最大 x 维度 另外 如果我有一个线性坐标 i 我如何找到 x y z 我似乎无法在谷歌上找到这个 所有结果都充满
  • PHPUnit - 模拟 S3Client 无法正常工作

    库 aws aws sdk php 2 PHP 版本 PHP 5 4 24 cli 作曲家 json require php gt 5 3 1 aws aws sdk php 2 require dev phpunit phpunit 4

随机推荐

  • 如何编辑jupyter lab主题

    As 在上一个问题中描述过 现在可以编辑 Jupyter Lab 主题 然而 这个主题对我个人来说有一些问题 例如 它使绘图轴难以阅读 因为它们的默认颜色是黑色 其他用户have had 类似问题 因此 我想分叉现有主题并将绘图显示单元设置
  • 测量 C++ OpenMP 代码中的执行时间

    我正在 i 以顺序方式运行 cpp 代码并 ii 使用 OpenMP 语句 我想看看时差 为了计算时间 我使用这个 include
  • l.append[i],对象不可下标? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 目前不接受答案 当我做 l for i in range 10 if i 3 0 or i 5 0 l append i print sum l I get Traceback most r
  • 使用 EPPLUS 下载受密码保护的 Excel

    我正在使用 Excel 形式导出数据EPPLUSExcel 库 我希望当 Excel 下载时它会要求输入密码 我尝试过以下代码 FileInfo newFile new FileInfo sample xlsx using ExcelPac
  • Node.js 和 JXcore 如何选择?

    JXcore 似乎是对 Node js 的改进 检查这个精心设计的报价 JXcore 具有内置的多线程支持 可以 在您现有的 Node js 应用程序上启用 无需额外 变化 JXcore 多线程可能比 Node JS 集群模块带来大约 30
  • 如何在Google表格中列出所有排列而不重复?

    当前帖子是此链接问题的后续问题 洗牌一副假设的 7 张交易卡 并在 Google 表格中列出它们可以出现的订单 惊喜 我的问题孩子实际上是 真女神转生 3 的排列 一款电子游戏 我认为将其放入交易卡的术语中对于外行来说会更有意义 对不起 好
  • 如何将地图转换为数据框?

    m 是一个映射 如下所示 scala gt m res119 scala collection mutable Map Any Any Map A gt 0 11164610291904906 B gt 0 1185675594342461
  • Node.js 请求 CERT_HAS_EXPIRED

    我正在使用 Mikeal 的请求 https github com mikeal request 向服务器发出 https 请求 但是 我不断收到 CERT HAS EXPIRED 授权错误 request url https www do
  • 如何使用 jq 从 JSON 获取键名称

    curl http testhost test com 8080 application app version jq version jq 上述命令仅输出如下值 email protected 2323 test 02 03 2014 1
  • HibernateException:无法获取当前线程的事务同步会话

    我收到错误 Exception in thread main org hibernate HibernateException Could not obtain transaction synchronized Session for cu
  • 如何更改每个 HTTP 请求的 NHibernate 连接字符串?

    确实如上 An ISessionFactory OpenSession 可以提供一个IDbConnection 另一种选择是实施IConnectionProvider这将创造适当的IDbConnection实例取决于某些条件 必须是全局的
  • wkhtmltopdf 输出流和下载 - 对话框

    是否可以从任何 html 文件获取 wkhtmltopdf 创建的 pdf 流 并在 IE Firefox Chrome 等中弹出下载对话框 目前我通过以下代码获取输出流 public class Printer public static
  • Rails 3 中的自引用模型

    我有一个实体模型 我想显示实体之间的连接 即实体 1 连接到实体 2 我现在的想法是在两者之间创建一个称为 Connection 的连接模型 并让它像传统的 Rails 连接表一样工作 除了列为entity one id和entity tw
  • 如何直接在 C# 中执行批处理命令?

    我想执行批处理命令并将输出保存在字符串中 但我只能执行文件而无法将内容保存在字符串中 批处理文件 回声关闭 C lmxendutil exe licstatxml 主机 serv005 端口 6200 gt C Temp HW Lic XM
  • XCODE 在构建和运行时自动保存代码?

    如何告诉 Xcode 在每次构建并运行时自动保存源代码而不提示 Xcode 首选项 选择 建筑 选项卡 右下角 对于未保存的文件 选择 始终保存
  • Google Appengine NDB 祖先与键查询

    我将一个实体的密钥存储为另一个实体的属性 以便将它们关联起来 目前项目正处于重构阶段 所以我正在考虑引入祖先 这两种方法之间有性能差异吗 如果我们介绍祖先 我可能会获得什么特定的优势 class Book ndb Model class A
  • AngularJS:ng-selected不显示所选值[重复]

    这个问题在这里已经有答案了 正如标题所示 我的选择似乎无法显示所选值 也就是说 例如 正确选择了
  • 列表列表更改意外地反映在子列表中

    我创建了一个列表列表 gt gt gt xs 1 4 3 gt gt gt print xs 1 1 1 1 1 1 1 1 1 1 1 1 然后 我更改了最里面的值之一 gt gt gt xs 0 0 5 gt gt gt print x
  • 如何在 new.js.erb 中使用局部变量 f 渲染 RAILS 部分?

    有一种方法可以在 js erb 中渲染 erb 页面 如下所示 在 Rails 中使用 remote gt true invoice against lease html 我们有一个像这样的部分 customer quote record
  • 使用 php 创建转置矩阵 [重复]

    这个问题在这里已经有答案了 例如 如果矩阵是 1 2 3 4 5 6 那么上面矩阵的转置将是 1 3 5 2 4 6 这是我当前的代码 有一种奇怪的 PHP 方法来转置