我正在尝试合并两个数组。一个数组具有名称,另一个数组具有值。我想将它们合并到单个多维数组中,如果值的名称相似,则它们在同一子数组中。我是编程新手,什么也没做
名称:
Array
(
[0] => TestAgent
[1] => TestAgent1
[2] => TestAgent1
[3] => TestAgent2
[4] => TestAgent2
[5] => TestAgent2
)
值:
Array
(
[0] => 2019-04
[1] => 2019-05
[2] => 2019-06
[3] => 2019-04
[4] => 2019-05
[5] => 2019-06
)
这是期望的输出
Array
(
[0] => Array
(
[0] => TestAgent
[1] => 2019-04
)
[1] => Array
(
[0] => TestAgent1
[1] => 2019-05
[2] => 2019-06
)
[2] => Array
(
[0] => TestAgent2
[1] => 2019-04
[2] => 2019-05
[3] => 2019-06
)
)
答案 0 :(得分:2)
从array_count_values()
数组上的$names
获取不同的值计数,然后使用该值来定义array_slice()
中要使用的元素数。切片的元素数量增加了下一个偏移量。
$counts = array_count_values($names);
$offset = 0;
foreach (array_values(array_unique($names)) as $key=>$name) {
$slice = array_slice($values, $offset, $counts[$name]);
$offset += count($slice);
$result[$name] = $slice;
}
print_r($result);
答案 1 :(得分:2)
您可以使用array_intersect_key从名称数组中获取匹配的值。
此方法不需要排序的数组。
$names = ['TestAgent1', 'TestAgent', 'TestAgent1', 'TestAgent1', 'TestAgent2', 'TestAgent2', 'TestAgent2'];
$values = ['2019-01', '2019-04', '2019-05', '2019-06', '2019-04', '2019-05', '2019-06'];
$unique = array_unique($names);
foreach($unique as $name){
$res[] = array_merge([$name], array_intersect_key($values, array_intersect($names, [$name])));
}
print_r($res);
输出:
Array
(
[0] => Array
(
[0] => TestAgent1
[1] => 2019-01
[2] => 2019-05
[3] => 2019-06
)
[1] => Array
(
[0] => TestAgent
[1] => 2019-04
)
[2] => Array
(
[0] => TestAgent2
[1] => 2019-04
[2] => 2019-05
[3] => 2019-06
)
)
答案 2 :(得分:1)
<?php
$one =
[
'Testagent',
'Testagent1',
'Testagent1',
'Testagent2',
'Testagent2',
'Testagent2'
];
$two =
[
'2019-04',
'2019-05',
'2019-06',
'2019-04',
'2019-05',
'2019-06'
];
$n = -1;
$previous = null;
foreach($one as $k=>$v) {
if($v !== $previous)
$items[++$n][] = $v;
$items[$n][] = $two[$k];
$previous = $v;
}
var_export($items);
输出:
array (
0 =>
array (
0 => 'Testagent',
1 => '2019-04',
),
1 =>
array (
0 => 'Testagent1',
1 => '2019-05',
2 => '2019-06',
),
2 =>
array (
0 => 'Testagent2',
1 => '2019-04',
2 => '2019-05',
3 => '2019-06',
),
)
如果第一个数组没有分组的相似值,请先对其进行排序。