php二维数组根据key的值排序分组

标签 php arrays

我有一个二维数组,需要根据 assemble_id 进行分组,遍历得不到我想要的结果。下面是原始数组:

$list = [
0 =>[
    'nickname' => 'Bob',
    'phone' => 15295892895,
    'is_group' => 1,
    'created_at' => 1544944181,
    'assemble_id' => 'c1d0zUbmP',
    'status' => 1
],
1 =>[
    'nickname' => 'Jack',
    'phone' => 15295892895,
    'is_group' => 1,
    'created_at' => 1544944181,
    'assemble_id' => 'ED6OJX4VV',
    'status' => 1
],
2 =>[
    'nickname' => 'Grace',
    'phone' => 15295892895,
    'is_group' => 0,
    'created_at' => 1544944181,
    'assemble_id' => 'c1d0zUbmP',
    'status' => 1
],
3 =>[
    'nickname' => 'Jelly',
    'phone' => 15295892895,
    'is_group' => 0,
    'created_at' => 1544944181,
    'assemble_id' => 'ED6OJX4VV',
    'status' => 1
]
];

我需要的是:

     [
            [
                'assemble_id' => 'c1d0zUbmP',
                'assemble_group' => [
                    [
                        'nickname' => 'Bob',
                        'phone' => 15295892895,
                        'is_group' => 1,
                        'created_at' => 1544944181,
                        'assemble_id' => 'c1d0zUbmP',
                        'status' => 1
                    ],
                    [
                        'nickname' => 'Grace',
                        'phone' => 15295892895,
                        'is_group' => 0,
                        'created_at' => 1544944181,
                        'assemble_id' => 'c1d0zUbmP',
                        'status' => 1
                    ]
                ]
            ],
            [
                'assemble_id' => 'ED6OJX4VV',
                'assemble_group' => [
                    [
                        'nickname' => 'Jack',
                        'phone' => 15295892895,
                        'is_group' => 1,
                        'created_at' => 1544944181,
                        'assemble_id' => 'ED6OJX4VV',
                        'status' => 1
                    ],
                    [
                        'nickname' => 'Jack',
                        'phone' => 15295892895,
                        'is_group' => 0,
                        'created_at' => 1544944181,
                        'assemble_id' => 'ED6OJX4VV',
                        'status' => 1
                    ]
                ]
            ]
        ];

我需要按照相同的 assemble_id 进行分组,并将 is_group=1 放在每组的第一个 这是我的代码:

function formatData($list)
{
    $data = [];
    foreach ($list as $k=>$v) {
        $list[$k]['created_at'] = formatDate($v['created_at'],'Y-m-d H:i');
        $list[$k]['phone'] = setMobile($v['phone']);
        $data[$k]['assemble_id'] = $v['assemble_id'];
        $data[$v['assemble_id']][] = $list[$k];
    }
    return $data;
}

这并没有得到我想要的结果。

最佳答案

分配临时关联键,然后在完成循环后将其删除。

代码:(Demo)

foreach ($list as $row) {
    $result[$row['assemble_id']]['assemble_id'] = $row['assemble_id'];
    $result[$row['assemble_id']]['assemble_group'][] = [
        'nickname' => $row['nickname'],
        'phone' => $row['phone'],  // add your function here
        'is_group' => $row['is_group'],
        'created_at' => $row['created_at'],    // add your function here
        'assemble_id' => $row['assemble_id'],
        'status' => $row['status']
    ];
}
var_export(array_values($result));

输出:

array (
  0 => 
  array (
    'assemble_id' => 'c1d0zUbmP',
    'assemble_group' => 
    array (
      0 => 
      array (
        'nickname' => 'Bob',
        'phone' => 15295892895,
        'is_group' => 1,
        'created_at' => 1544944181,
        'assemble_id' => 'c1d0zUbmP',
        'status' => 1,
      ),
      1 => 
      array (
        'nickname' => 'Grace',
        'phone' => 15295892895,
        'is_group' => 0,
        'created_at' => 1544944181,
        'assemble_id' => 'c1d0zUbmP',
        'status' => 1,
      ),
    ),
  ),
  1 => 
  array (
    'assemble_id' => 'ED6OJX4VV',
    'assemble_group' => 
    array (
      0 => 
      array (
        'nickname' => 'Jack',
        'phone' => 15295892895,
        'is_group' => 1,
        'created_at' => 1544944181,
        'assemble_id' => 'ED6OJX4VV',
        'status' => 1,
      ),
      1 => 
      array (
        'nickname' => 'Jelly',
        'phone' => 15295892895,
        'is_group' => 0,
        'created_at' => 1544944181,
        'assemble_id' => 'ED6OJX4VV',
        'status' => 1,
      ),
    ),
  ),
)

关于php二维数组根据key的值排序分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53810315/

相关文章:

php - 登录页面 "mysqli_query"

无法理解这种计算数字平方的方式

jquery - 循环.prevAll()?

php - 使用 Joomla MVC 更新 MySQL 表行,

javascript - Ajax Promise 是同时执行的,而不是顺序执行的

php - 替换重复的 html php 仅图像和文本更改

java - 如何在 Java 中填充数组?

ruby-on-rails - 在构建数组之前检查变量是否存在

arrays - 无法将变体数组分配给类型化数组

javascript - 在 javascript 中作为数组成员存储的函数/命令