Еще раз об удалении повторяющихся значений из многомерного массива в Stack Overflow

После изнурительных поисков я обнаружил некоторые похожие проблемы, подобные той, которую я хотел бы решить, но я не мог использовать их ответы.

Вот несколько очень хороших примеров:

Как удалить повторяющиеся значения из многомерного массива в PHP

Как удалить повторяющиеся значения из многомерного массива в PHP

Как удалить повторяющиеся значения из многомерного массива в PHP повторно

Это самый похожий, но ответ почему-то не работает для меня.

Значения массива php-фильтра и удаление дубликатов из многомерного массива

Основным отличием моей проблемы является то, что, хотя люди ищут решение для удаления всего дублированного подмассива из массива, я пытаюсь удалить подмассив, когда только одна пара $ key => $ value подмассива похожа на соответствующая пара другого подмассива. Другие пары могут иметь разные значения или даже одинаковые.

Вот мой массив:

Array(

[0] => Array
(
[0] => AAA
[1] => 500
)

[1] => Array //Won't be delete 'cause [0] is different, although [1] is the same.
(
[0] => BBB
[1] => 500
)

[2] => Array //Will be delete 'cause [0] is the same.
(
[0] => AAA
[1] => 500
)

[3] => Array //Won't be delete 'cause [0] is different.
(
[0] => CCC
[1] => 820
)

[4] => Array
(
[0] => AAA //Will be delete 'cause [0] is the same. [1] is also different.
[1] => 774
)

Как мне удалось удалить эти подмассивы, чтобы у меня был следующий результат:

Array(

[0] => Array
(
[0] => AAA
[1] => 500
)

[1] => Array
(
[0] => BBB
[1] => 500
)

[2] => Array
(
[0] => CCC
[1] => 820
)

Спасибо заранее!

1

Решение

Самое простое решение (на мой взгляд) вместо использования магического array_filter а также array_map Ремесло, которое трудно поддерживать, это написать специальную функцию самостоятельно:

$out = [];
$usedKeys = [];
foreach ($in as $element)
{
list ($a, $b) = $element;
if (!isset($usedKeys[$a]))
{
$usedKeys[$a] = true;
$out[]= $element;
}
}
var_dump($out);

Это вернет только те элементы, чей первый элемент пары является уникальным (берется первый, если доступно несколько записей).

0

Другие решения

Это работает для меня (на основании предоставленной ссылки):

<?php

$items = array(
array(
0 => 'AAA',
1 => 500,
),
array(
0 => 'BBB',
1 => 500,
),
array(
0 => 'AAA',
1 => 500,
),
array(
0 => 'CCC',
1 => 820,
),
array(
0 => 'AAA',
1 => 774,
),
);$taken = array();

foreach($items as $key => $item) {
if(!in_array($item[0], $taken)) {
$taken[] = $item[0];
} else {
unset($items[$key]);
}
}echo '<pre>'.print_r($items,true).'</pre>';

скриптовая ссылка

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector