Удалить дублированные значения, полностью удаленные из массива в переполнении стека

Я хочу удалить значения из массива, которые являются одинаковыми.
Например:
Это массив.

Array ( [0] => 1 [1] => 63 [2] => 1 )

Есть ли какая-либо функция или что-то в ядре php, которые возвращают мне только значение, которое не является дубликатом, т.е. значение с индекс № 1 и удалить индекс 0 и 2, Я хочу результат

Array ( [1] => 63)

Там в любом случае?

1

Решение

Ты можешь использовать array_filter () а также array_count_values ​​() проверить количество не больше 1.

<?php
$data = [1, 63, 1];

$data = array_filter($data, function ($value) use ($data) {
return !(array_count_values($data)[$value] > 1);
});

print_r($data);

https://3v4l.org/uIVLN

Результат:

Array
(
[1] => 63
)

Также будет хорошо работать с несколькими дубликатами: https://3v4l.org/eJSTY

4

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

Одним из вариантов является использование array_count_values посчитать значения. Цикл и толкать только 1 ценности

$arr = array(1,63,1);
$arrKey = array_flip( $arr ); //Store the key

$result = array();
foreach( array_count_values($arr) as $k => $v ) {
if ( $v === 1 ) $result[ $arrKey[$k] ] = $k;
}

echo "<pre>";
print_r( $result );
echo "</pre>";

Это приведет к:

Array
(
[1] => 63
)

Doc: array_count_values

1

Я считаю, что лучшим решением является следующее:

function removeDuplicates(array $initialArray) : array
{
// Remove duplicate values from an array
$uniqueValues = array_unique($initialArray);

// Computes the difference of arrays with additional index check
$duplicateValues = array_diff_assoc($initialArray, $uniqueValues);

// Removed any values in both arrays
return array_diff($uniqueValues, $duplicateValues);
}

Это решение использует следующие функции в PHP:

array_unique

array_diff_asoc

array_diff

1

Ты можешь использовать array_keys () со значением поиска в качестве второго параметра, чтобы увидеть, сколько раз значение существует.

$array = [1, 63, 1, 12, 64, 12];

$new = [];
foreach ($array as $value) {
// Get all keys that have this value. If there's only one, save it.
if (count(array_keys($array, $value)) == 1) {
$new[] = $value;
}
}

Демо-версия: https://3v4l.org/G1DCg

Я не знаю производительность этого по сравнению с другими ответами. Я оставляю профилирование кому-то еще.

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