热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP:如何通过键合并两个嵌套的数组

如何解决《PHP:如何通过键合并两个嵌套的数组》经验,为你挑选了1个好方法。

我有两个像这样的数组:

$team = [
    ['id' => 1, 'name' => 'Team A'],
    ['id' => 2, 'name' => 'Team B'],
    ['id' => 3, 'name' => 'Team C'], 
]; 

$people = [
    ['id' => 1, 'name' => 'Mark Hamill', 'team' => 1],
    ['id' => 2, 'name' => 'Nicolas Cage', 'team' => 2],
    ['id' => 3, 'name' => 'Tom Cruise', 'team' => 3],
    ['id' => 4, 'name' => 'Tom Hanks', 'team' => 1],
    ['id' => 5, 'name' => 'Brad Pitt', 'team' => 2],
    ['id' => 6, 'name' => 'Paul Smith', 'team' => 3],
    ['id' => 7, 'name' => 'Matt Daemon', 'team' => 1],
    ['id' => 8, 'name' => 'Robert Redford', 'team' => 2],
]  

我想根据团队ID将$ people数组合并为$ team数组作为子节点。因此结果将是:

$team = [
    [
        'id' => 1, 
        'name' =>'Team A',
        'members' => [
            ['id' => 1, 'name' => 'Mark Hamill', 'team' => 1],
            ['id' => 4, 'name' => 'Tom Hanks', 'team' => 1],
            ['id' => 7, 'name' => 'Matt Daemon', 'team' => 1],
        ]
    ],
    [
        'id' => 2, 
        'name' =>'Team B',
        'members' => [
            ['id' => 2, 'name' => 'Nicolas Cage', 'team' => 2],
            ['id' => 5, 'name' => 'Brad Pitt', 'team' => 2],
            ['id' => 8, 'name' => 'Robert Redford', 'team' => 2],
        ]
    ],
    [
        'id' => 3, 
        'name' =>'Team C',
        'members' => [
            ['id' => 3, 'name' => 'Tom Cruise', 'team' => 3],
            ['id' => 6, 'name' => 'Paul Smith', 'team' => 3],
        ]
    ], 
]; 

我知道我可以遍历$ team并根据他们的“ team” ID一次添加一个相关的$ people,但是我想知道是否有更有效的方法来做到这一点。在我的项目中,这两个数组中的每个数组都可以增长到最多包含大约50个项目,并且一次处理这些项目确实会使页面速度变慢。

谢谢



1> Andreas..:

这将循环$ teams数组,并与array_column相交以获得所需的数组。

$teampeople = array_column($people, "team");
//Creates a lookup array of the teams from people array

foreach($team as &$t){
    // Here I match from the lookup array and get the "main" arrays.  
    // Array_values remove the indexed from the resulting array to make it 0,1,2 etc.
    $t['members'] = array_values(array_intersect_key($people, array_intersect($teampeople, [$t['id']])));
}
unset($t); // just to make sure you don't accidentally change the array
var_dump($team);

输出:

array(3) {
  [0]=>
  array(3) {
    ["id"]=>
    int(1)
    ["name"]=>
    string(6) "Team A"
    ["members"]=>
    array(3) {
      [0]=>
      array(3) {
        ["id"]=>
        int(1)
        ["name"]=>
        string(11) "Mark Hamill"
        ["team"]=>
        int(1)
      }
      [1]=>
      array(3) {
        ["id"]=>
        int(4)
        ["name"]=>
        string(9) "Tom Hanks"
        ["team"]=>
        int(1)
      }
      [2]=>
      array(3) {
        ["id"]=>
        int(7)
        ["name"]=>
        string(11) "Matt Daemon"
        ["team"]=>
        int(1)
      }
    }
  }
  [1]=>
  array(3) {
    ["id"]=>
    int(2)
    ["name"]=>
    string(6) "Team B"
    ["members"]=>
    array(3) {
      [0]=>
      array(3) {
        ["id"]=>
        int(2)
        ["name"]=>
        string(12) "Nicolas Cage"
        ["team"]=>
        int(2)
      }
      [1]=>
      array(3) {
        ["id"]=>
        int(5)
        ["name"]=>
        string(9) "Brad Pitt"
        ["team"]=>
        int(2)
      }
      [2]=>
      array(3) {
        ["id"]=>
        int(8)
        ["name"]=>
        string(14) "Robert Redford"
        ["team"]=>
        int(2)
      }
    }
  }
  [2]=>
  &array(3) {
    ["id"]=>
    int(3)
    ["name"]=>
    string(6) "Team C"
    ["members"]=>
    array(2) {
      [0]=>
      array(3) {
        ["id"]=>
        int(3)
        ["name"]=>
        string(10) "Tom Cruise"
        ["team"]=>
        int(3)
      }
      [1]=>
      array(3) {
        ["id"]=>
        int(6)
        ["name"]=>
        string(10) "Paul Smith"
        ["team"]=>
        int(3)
      }
    }
  }
}

https://3v4l.org/kmvuR


推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 多维数组的使用
    本文介绍了多维数组的概念和使用方法,以及二维数组的特点和操作方式。同时还介绍了如何获取数组的长度。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
author-avatar
骑蜗牛追神81986
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有