Удалить дубликаты массива

Я просто просматривал эти вопросы по PHP и застрял на одном из них. Вопрос в том:

У вас есть одномерный массив PHP. Пожалуйста, напишите функцию PHP, которая
принимает 1 массив в качестве параметра и возвращает массив. Функция должна
удалить значения во входном массиве, который появляется в 3 или более раз?

Например, если вы даете функцию

массив (1, 3, 5, 2, 6, 6, 6, 3, 1, 9)the function will returnмассив (1, 3, 5, 2, 3, 1, 9)

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

function removeDuplicate($array){
$result = array_count_values( $array );
$values = implode(" ",  array_values($result));
echo $values . "<br>";
}

$qArray = array(1, 3, 5, 2, 6, 6, 6, 3, 1, 9);
removeDuplicate($qArray);

Еще одна вещь, которую мы не можем использовать array_unique потому что он включает в себя значение, которое повторяется, и в вопросе мы полностью удаляем их из текущего массива.

4

Решение

Предполагая, что значение может не появляться более 3 раз нигде в массиве:

$array = array(1, 3, 5, 2, 6, 6, 6, 3, 1, 9);

// create array indexed by the numbers to remove
$remove = array_filter(array_count_values($array), function($value) {
return $value >= 3;
});

// filter the original array
$results = array_values(array_filter($array, function($value) use ($remove) {
return !array_key_exists($value, $remove);
}));

Если значения не могут появляться 3 раза подряд:

$results = [];
for ($i = 0, $n = count($array); $i != $n;) {
$p = $i++;
// find repeated characters
while ($i != $n && $array[$p] === $array[$i]) {
++$i;
}

if ($i - $p < 3) {
// add to results
$results += array_fill(count($results), $i - $p, $array[$p]);
}
}
1

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

Это должно работать:

function removeDuplicate($array) {
foreach ($array as $key => $val) {
$new[$val] ++;
if ($new[$val] >= 3)
unset($array[$key]);
}
return $array;
}
1

запустить эту функцию, я надеюсь, что это поможет ..

function removeDuplicate($array){
$result = array_count_values( $array );
$dub = array();
$answer = array();
foreach($result as $key => $val) {
if($val >= 3) {
$dub[] = $key;
}
}
foreach($array as $val) {
if(!in_array($val, $dub)) {
$answer[] = $val;
}
}
return $answer;
}
1

Вы можете использовать эту функцию с любым количеством вхождений, которое вы хотите — по умолчанию 3

function removeDuplicate($arr, $x = 3){
$new = $rem = array();
foreach($arr as $val) {
$new[$val]++;
if($new[$val]>=$x){
$rem[$val]=$new[$val];
}
}
$new = array_keys(array_diff_key($new, $rem));
return $new;
}
1

Я думаю, что он получает правильный вывод. просто попробуй один раз.

 $array=array(1,2,3,7,4,4,3,5,5,6,7);
$count=count($array);
$k=array();
for($i=0;$i<=$count;$i++)
{
if(!in_array($array[$i],$k))
{
$k[]=$array[$i];
}
}
array_pop($k);
print_r($k);

в этом первом $ k — пустой массив, после чего мы вставляем значения в $ k.

1

Вы должны использовать функцию array_unique.

<?php
$q = array(1, 3, 5, 2, 6, 6, 6, 3, 1, 9);
print_r(array_unique($q));
?>

Попробуйте и дайте мне знать, если это сработало.

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