duanchuonong5370 2014-02-20 15:29
浏览 17
已采纳

从基于公共ID的多维数组中获取多个数组

I have one large array and I want to group this into other arrays based on a common ID so that I can use array_splice to get only the first and last occurrence of that ID.

array( 
    [0] => array(id => 34, name = "walter"),
    [1] => array(id => 25, name = "walter jr"),
    [2] => array(id => 34, name = "saul"),
    [3] => array(id => 25, name = "jesse"),
    [4] => array(id => 25, name = "todd")
   )

What I want to end up with is something like this.

array( 
    [0] => array(
                 id => 34, name = "walter",
                 id => 34, name = "saul"
                ),

    [1] => array(
                 id => 25, name = "walter jr",
                 id => 25, name = "jesse",
                 id => 25, name = "todd"
                 )
     )

I'm having a really hard time trying to wrap my head around how to accomplish this and have searched all over. I've found some solutions using array_unique and array_diff but i'm never able to get the result i'm looking for.

  • 写回答

2条回答 默认 最新

  • doupeizheng3918 2014-02-20 16:04
    关注

    You can use array_reduce to group array elements, see below:

    $data = array(
      0 => array('id' => 34, 'name' => "walter"),
      1 => array('id' => 25, 'name' => "walter jr"),
      2 => array('id' => 34, 'name' => "saul"),
      3 => array('id' => 25, 'name' => "jesse"),
      4 => array('id' => 25, 'name' => "todd")
    );
    
    $result = array_reduce($data, function ($result, $item){
      if (!isset($result[$item['id']])) {
            $result[$item['id']] = array();
      }
      $result[$item['id']][] = $item;
      return $result;
    }, array());
    print_r(array_values($result));
    

    and result is:

    Array
    (
        [0] => Array
            (
                [0] => Array
                    (
                        [id] => 34
                        [name] => walter
                    )
    
                [1] => Array
                    (
                        [id] => 34
                        [name] => saul
                    )
    
            )
    
        [1] => Array
            (
                [0] => Array
                    (
                        [id] => 25
                        [name] => walter jr
                    )
    
                [1] => Array
                    (
                        [id] => 25
                        [name] => jesse
                    )
    
                [2] => Array
                    (
                        [id] => 25
                        [name] => todd
                    )
    
            )
    
    )
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路