通过一列对子数组进行分组,并在组内将逗号分隔值与另一列进行比较 [英] Group subarrays by one column, make comma-separated values from other column within groups

查看:73
本文介绍了通过一列对子数组进行分组,并在组内将逗号分隔值与另一列进行比较的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


我有一个看起来像这样的数组:


I have a array that looks like this:

$array = [
    ["444", "0081"],
    ["449", "0081"],
    ["451", "0081"],
    ["455", "2100"],
    ["469", "2100"]
];

我需要将其归类为一个新数组,如下所示:

I need to group as a new array that looks like:

array (
  0 => 
  array (
    0 => '444,449,451',
    1 => '0081',
  ),
  1 => 
  array (
    0 => '455,469',
    1 => '2100',
  ),
)

我尝试了许多脚本,但没有成功.

I'd tried many scripts, but with no success.

function _group_by($array, $key) {
    $return = array();
    foreach($array as $val) {
        $return[$val[$key]][] = $val;
    }
    return $return;
}
$newArray = _group_by($array, 1); // (NO SUCCESS)

推荐答案

应该有更优雅的解决方案,但我能想到的最简单的解决方案就是这个.

There should be more elegant solutions, but simplest one I can think of would be this.

// The data you have pasted in the question
$data = []; 
$groups = [];

// Go through the entire array $data
foreach($data as $item){
    // If the key doesn't exist in the new array yet, add it       
    if(!array_key_exists($item[1], $groups)){
        $groups[$item[1]] = [];
    }

    // Add the value to the array
    $groups[$item[1]][] = $item[0];
}

// Create an array for the data with the structure you requested
$structured = [];
foreach($groups as $group => $values){
    // With the array built in the last loop, implode it with a comma
    // Also add the 'key' from the last array to it ($group)
    $structured[] = [implode(',', $values), $group];
}

我还没有测试过,但是类似的方法应该可以解决.这简单地遍历给定数组并以结构化方式收集所有条目(因此$groups变量将为共享键的每个组包含一个数组条目,并且该键将对应于给定数组中每个条目的第二个条目) .从那里开始,就只是对其进行重组以获取所需的格式.

I haven't tested this but something similar should do the trick. This simply goes through the given array and collects all entries in a structurized manner (so $groups variable will contain an array entry for each group sharing a key, and the key will correspond to the 2nd item in each item within the given array). From there it's just about restructuring it to get the format you have requested.

http://php.net/manual/en/control-structures .foreach.php

这篇关于通过一列对子数组进行分组,并在组内将逗号分隔值与另一列进行比较的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆