Я хочу удалить значения из массива, которые являются одинаковыми.
Например:
Это массив.
Array ( [0] => 1 [1] => 63 [2] => 1 )
Есть ли какая-либо функция или что-то в ядре php, которые возвращают мне только значение, которое не является дубликатом, т.е. значение с индекс № 1 и удалить индекс 0 и 2, Я хочу результат
Array ( [1] => 63)
Там в любом случае?
Ты можешь использовать 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);
Результат:
Array
(
[1] => 63
)
Также будет хорошо работать с несколькими дубликатами: https://3v4l.org/eJSTY
Одним из вариантов является использование 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
Я считаю, что лучшим решением является следующее:
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_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
Я не знаю производительность этого по сравнению с другими ответами. Я оставляю профилирование кому-то еще.