我有一个下面提到的数组。
$array = array(
'0' => array(
'names' => array(0 => 'Apple'),
'group' => 1
),
'1' => array(
'names' => array(0 => 'Mango'),
'group' => 1
),
'2' => array(
'names' => array(0 => 'Grapes'),
'group' => 1
),
'3' => array(
'names' => array(0 => 'Tomato'),
'group' => 2
),
'4' => array(
'names' => array(0 => 'Potato'),
'group' => 2
)
);
我希望结果是这样的:如果数组键“group”的值相同,则应该合并键“names”的值。我想要下面提到的输出。
$array = array(
'0' => array(
'names' => array(0 => 'Apple', 1 => 'Mango', 2 => 'Grapes'),
'group' => 1
),
'1' => array(
'names' => array(0 => 'Tomato', 1 => 'Potato'),
'group' => 2
)
);
PHP函数的完美使用示例array_reduce() http://php.net/manual/en/function.array-reduce.php:
$array = array_values(
array_reduce(
$array,
function (array $carry, array $item) {
// Extract the group name into a variable for readability
// and speed; it is used several times velow
$key = $item['group'];
// Initialize the group if it is the first entry in this group
if (! array_key_exists($key, $carry)) {
$carry[$key] = array(
'names' => array(),
'group' => $key,
);
}
// Add the new names to the group in the output array
$carry[$key]['names'] = array_merge($carry[$key]['names'], $item['names']);
// Return the partial result
return $carry;
},
array()
)
);
代码使用array_reduce() http://php.net/manual/en/function.array-reduce.php迭代构建一个包含预期值的新数组。
如果需要,回调函数会创建组,然后将已处理项的名称合并到结果数组中的现有组中。
使用生成的数组array_reduce()
使用以下值进行索引group
,按照它们在输入数组中出现的顺序。对于发布的数组,它们的键将是1
and 2
。如果您不关心按键,请删除对array_values()
以获得速度和可读性的一点提高。
功能array_values() http://php.net/manual/en/function.array-values.php删除键并返回一个使用从零开始的顺序数字键(如问题中列出的键)索引的数组。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)