从多维数组中删除元素的重复组合
Remove duplicate combination of elements from multidimensional array
我有一个包含以下字段的数组:
$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 个的组合需要是唯一的。
如果您不介意保留哪些重复项,可能最简单的方法是遍历循环,创建一个新数组,其中的键是所需唯一值的组合(我使用了分隔符##
在此代码中,您可以使用值中 不能 出现的任何内容)。这样重复项将被自动删除,因为数组不能有相同的键。循环完成后,可以使用 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
)
)
我有一个包含以下字段的数组:
$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 个的组合需要是唯一的。
如果您不介意保留哪些重复项,可能最简单的方法是遍历循环,创建一个新数组,其中的键是所需唯一值的组合(我使用了分隔符##
在此代码中,您可以使用值中 不能 出现的任何内容)。这样重复项将被自动删除,因为数组不能有相同的键。循环完成后,可以使用 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
)
)