【问题标题】:Remove Duplicate in an array and append values on same indexes php删除数组中的重复项并在相同索引上附加值php
【发布时间】:2017-03-19 12:52:08
【问题描述】:

在我的情况下,我想根据两个键即 a 和 b 删除重复项,并且需要在第三个键 i-e c 中附加值,并且结果数组应该类似于索引 a 和 b 处的值应该是非重复的并且值第三个索引将附加到新数组中。示例数组如下所示: 我有以下数组:

数组 ( [0] => 数组 ( [一] => 0 [b] => 0 [c] => 123 )

[1] => Array
    (
        [a] => 1
        [b] => 0
        [c] => 43134
    )

[2] => Array
    (
        [a] => 0
        [b] => 4
        [c] => 5423
    )

[3] => Array
    (
        [a] => 0
        [b] => 3
        [c] => 2342
    )

[4] => Array
    (
        [a] => 0
        [b] => 0
        [c] => 123
    )

[5] => Array
    (
        [a] => 1
        [b] => 0
        [c] => 43134
    )

[6] => Array
    (
        [a] => 0
        [b] => 4
        [c] => 5423
    )

[7] => Array
    (
        [a] => 0
        [b] => 3
        [c] => 2342
    )

)

我想要这样的结果:

数组 ( [0] => 数组 ( [一] => 0 [b] => 0 [c] => 数组 ( [0] => 123 [1] => 123 )

    )

[1] => Array
    (
        [a] => 1
        [b] => 0
        [c] => Array
            (
                [0] => 43134
                [1] => 43134
            )

    )

[2] => Array
    (
        [a] => 0
        [b] => 4
        [c] => Array
            (
                [0] => 5423
                [1] => 5423
            )

    )

[3] => Array
    (
        [a] => 0
        [b] => 3
        [c] => Array
            (
                [0] => 2342
                [1] => 2342
            )

    )

)

【问题讨论】:

    标签: php arrays


    【解决方案1】:

    遍历数组,跟踪已经看到的元素,如果您之前已经看到过该元素(a/b 组合),则将“c”元素附加到原始数组 - 作为函数 - 使用 $flattened如果您不想将其填充到函数中,请直接使用。

    $result = array();
    
    for ($i = 0; $i < count($arr); $i++)
    {
        $a = $arr[$i]['a'];
        $b = $arr[$i]['b'];
    
        if (isset($result[$a][$b]))
        {
            // append the 'c' value
            $result[$a][$b]['c'][] = $arr[$i]['c'];
            // we've already seen the a/b combo
            continue;
        }
    
        // convert 'c' key to an array
        $arr[$i]['c'] = array($arr[$i]['c']);
    
        // keep the result
        $result[$a][$b] = $arr[$i];
    }
    
    $flattened = array();
    
    // flatten the a/b structure to only keep the elements themselves
    foreach ($result as $a => $b_level) {
        foreach ($b_level as $b => $element) {
            $flattened[] = $element;
        }
    }
    
    return $flattened;
    

    【讨论】:

    • 'c' 索引上的值永远不会相同
    • 但是关键是一样的,对吧?您的示例表明您只是在重复相同的 'c' 值.. 您的意思是附加已存在的所有以下条目的 c 值,而不仅仅是重复元素?
    • 是的...我希望它们附加...例如它们是相同的,但在实际问题中它们是不同的..我也想要 a 和 b 索引
    • 我已经更新了代码以反映这一点 - 通过跟踪 $a,$b 作为数组键或类似的东西,它可以变得更简单,但这将不管值如何$a 和 $b。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    相关资源
    最近更新 更多