我有这样的数组:
Array
(
Array
(
[0] => xx
[1] => 123
)
Array
(
[0] => xx
[1] => 523
)
Array
(
[0] => xx
[1] => 783
)
Array
(
[0] => yy
[1] => 858
)
Array
(
[0] => yy
[1] => 523
)
Array
(
[0] => xx
[1] => 235
)
)
我想做的是:
Array
(
Array
(
[0] => xx
[1] => 123
[2] => 523
[3] => 783
[4] => 235
)
Array
(
[0] => yy
[1] => 858
[2] => 523
)
)
所以,我只需要查找[0],找到相同的值,然后删除重复项,并在相同的[0]值下合并其他值(未知数字,尽管这里只有一个)。 如果我这样做:
$array = [array("xx","123"), array("xx","523"), array("xx","783"), array("yy","858"), array("yy","523"), array("xx","235")];
$new=array();
$col = array_column($array, 0);
foreach( $array as $key => $value ) {
if( ($find = array_search($value[0], $col)) !== false ) {
unset($value[0]);
$new[$find]= array_merge($array[$find], $value);
}
}
print_r($new);
我得到了这个(没有所有值):
Array
(
[0] => Array
(
[0] => xx
[1] => 123
[2] => 235
)
[3] => Array
(
[0] => yy
[1] => 858
[2] => 523
)
)
答案 0 :(得分:1)
当其他值的数量只有一个时:
$array = [
['xx', 123],
['xx', 523],
['xx', 783],
['yy', 858],
['yy', 523],
['xx', 235],
];
$result = [];
foreach ($array as $row) {
list($key, $value) = $row;
if (!array_key_exists($key, $result)) {
$result[$key] = [$key];
}
$result[$key][] = $value;
}
针对任意数量的其他值的更通用的解决方案:
$array = [
['xx'],
['xx', 523],
['xx', 783, 111],
['yy', 858, 222, 333],
['yy', 523, 444, 555, 666],
['xx', 235, 777, 888],
];
$result = [];
foreach ($array as $row) {
$key = array_shift($row);
if (!array_key_exists($key, $result)) {
$result[$key] = [$key];
}
$result[$key] = array_merge($result[$key], $row);
}
此外,在最后一种情况下,array_merge()
可能会被带有解压缩参数的array_push()
替换:
if (sizeof($row) > 0) {
array_push($result[$key], ...$row);
}
答案 1 :(得分:1)
使用0
索引作为新数组的键并附加1
索引中的其他值的简单循环:
foreach($array as $value) {
$result[$value[0]][0] = $value[0];
$result[$value[0]][] = $value[1];
//$result[$value[0]] = array_unique($result[$value[0]]);
}
$result = array_values($result);
array_values()
将数组重新索引为数字索引。
对于唯一性,只需在循环中执行array_unique()
或在结尾处映射它:
$result = array_map('array_unique', $result);