我正在使用多维数组。如何按值删除重复项?
在下面的数组中,[0]、[2]和[5]具有相同的[ID]。
是否有一个函数可以根据特定值删除任何重复的数组?
在这种情况下,我想删除数组 [2] 和数组 [5],因为它们具有与数组 [0] 相同的 [ID]。
[
(object) ['d' => '2010-10-18 03:30:04', 'ID' => 9],
(object) ['d' => '2010-10-18 03:30:20', 'ID' => 4],
(object) ['d' => '2010-11-03 16:46:34', 'ID' => 9],
(object) ['d' => '2010-11-02 03:19:14', 'ID' => 1],
(object) ['d' => '2010-05-12 04:57:34', 'ID' => 2],
(object) ['d' => '2010-05-10 05:24:15', 'ID' => 9],
];
一种方法:(
$old_array
是你的数组,$new_array
将包含新数组,删除重复项,由该 ID 键入)
$new_array = array();
foreach ($old_array as $item)
if (!array_key_exists($item->ID, $new_array))
$new_array[$item->ID] = $item;
(我还没有测试过,但应该可以)
你可以用茴香酒好东西来做到这一点:
$result = FluentArray::from($array)->uniqueBy('ID')->toArray();
参见 http://ouzo.readthedocs.org/en/latest/utils/ Fluent_array.html#uniqueby
我认为循环并构造一个新数组是最简单的。 在循环中,使用 array_key_exists() 判断新数组中是否已存在该 ID,如果不存在,则追加一个元素。
它不是一个多维数组,它是一个对象数组。您可以循环遍历它(此示例更改了数组):
$ids = array();
forach($array as $key=>$obj) {
if(isset($ids[$obj->ID])) {//did we already encounter an object with this ID?
unset($array[$key]); // if yes, delete this object
}
else {
$ids[$obj->ID] = 1; // if not, add ID to processed IDs
}
}
您还可以创建一个新数组并将对象添加到新数组中。
foreach ($array as $element) {
foreach ($array as &$element2) {
if ($element2->ID == $element->ID && $element2 != $element) {
unset($element2);
}
}
}
注意第二个 foreach 中的循环引用。