从多维数组中删除元素的重复组合

问题描述 投票:0回答:1

我有一个包含字段的数组:

$products = array(
    [0] => array('name' => 'product_one', 'category' => 'category_one', employee => '3234'),
    [1] => array('name' => 'product_two', 'category' => 'category_two', employee => '5421'),
    [2] => array('name' => 'product_three', 'category' => 'category_one', employee => '3234'),
    [3] => array('name' => 'product_one', 'category' => 'category_one', employee => '2153'),
    [4] => array('name' => 'product_one', 'category' => 'category_two', employee => '6312')        
)

现在,在这种情况下,employee字段并不重要,但是product / category的组合是唯一的。

想要的结果:

$products = array(
    [0] => array('name' => 'product_one', 'category' => 'category_one', employee => '3234'),
    [1] => array('name' => 'product_two', 'category' => 'category_two', employee => '5421'),
    [2] => array('name' => 'product_three', 'category' => 'category_one', employee => '3234'),
    [4] => array('name' => 'product_one', 'category' => 'category_two', employee => '6312')        
)

任何想法最佳方法是什么?在生产中,我有30.000多个元素,通常大约有10个重复项。同样在真实数据库中,我有12个字段,并且其中4个字段的组合需要唯一)。

php multidimensional-array php-7
1个回答
0
投票

[如果您不介意保留哪个重复项,则遍历循环可能是最简单的,使用键组合所需的唯一值组成一个新数组(我使用了##的分隔符在这段代码中,您可以使用值中出现cannot的任何内容。这样,由于数组不能具有相同的键,重复项将被自动删除。循环完成后,可以使用array_values重新对输出数组进行数字索引:

$output = array();
foreach ($products as $p) {
    $output["{$p['name']}##{$p['category']}"] = $p;
}

$output = array_values($output);
print_r($output);

输出(用于样本数据):

Array
(
    [0] => Array
        (
            [name] => product_one
            [category] => category_one
            [employee] => 2153
        )
    [1] => Array
        (
            [name] => product_two
            [category] => category_two
            [employee] => 5421
        )
    [2] => Array
        (
            [name] => product_three
            [category] => category_one
            [employee] => 3234
        )
    [3] => Array
        (
            [name] => product_one
            [category] => category_two
            [employee] => 6312
        )
)

Demo on 3v4l.org

© www.soinside.com 2019 - 2024. All rights reserved.