如何从单个数组中删除和连接重复值

时间:2015-09-07 17:43:00

标签: php arrays loops for-loop foreach

我的下一个数组具有重复值,但只是第一个位置:

array(3){
[0]=> array(5){
    [0]=>'user1',
    [1]=>'2',
    [2]=>'0',
    [3]=>'0',
    [4]=>'0',
},
[2]=> array(5){
    [0]=>'user2',
    [1]=>'0',
    [2]=>'0',
    [3]=>'0',
    [4]=>'0'
},
[3]=> array(5){
    [0]=>'user1',
    [1]=>'0',
    [2]=>'0',
    [3]=>'0',
    [4]=>'4'
}}


$newArray = array();
        foreach ($array as $key) {
        $tmparray [] = array($key[0]);
            foreach ($tmparray as $keytmp) {
                if ($keytmp[0]==$key[0]) {
                    $position = array_search($keytmp[0], $key);                 
                    $newArray[] = array($keytmp[0]); 
                }
            }
    }

但我尝试将该值与array_search进行比较并创建一个新数组,但只创建第一个数组,如何创建一个数组来连接第一个位置和第三个并保留值位置,如下例所示?

array(3){
[0]=> array(5){
    [0]=>'user1',
    [1]=>'2',
    [2]=>'0',
    [3]=>'0',
    [4]=>'4',
},
[2]=> array(5){
    [0]=>'user2',
    [1]=>'0',
    [2]=>'0',
    [3]=>'0',
    [4]=>'0',
}}

提前致谢!

1 个答案:

答案 0 :(得分:0)

这应该适合你:

只需遍历数组并使用每个subArray的第一个键作为结果数组中的键。如果尚未设置,则只需将subArray分配给结果数组,否则只需将值添加到结果数组中。

最后,您可以使用array_values()重新编制数组索引。

<?php

    $result = [];
    foreach($array as $innerArray) {
        if(!isset($result[$innerArray[0]])) {
            $result[$innerArray[0]] = $innerArray;
        } else {
            $result[$innerArray[0]][1] += $innerArray[1];
            $result[$innerArray[0]][2] += $innerArray[2];
            $result[$innerArray[0]][3] += $innerArray[3];
            $result[$innerArray[0]][4] += $innerArray[4];
        }
    }

    $result = array_values($result);

?>