2014-12-10 6 views
4

Я просто просматривал эти вопросы для 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, поскольку она включает в себя значение, которое повторяется и в вопросе мы полностью удалить их из текущего массива.

+0

Показывает 3 или более раз подряд или в любом месте массива? –

+0

Do '$ values ​​= array_filter ($ values, function ($ value) {return $ value <= 3;})' после вашего 'array_count_values ​​()'. но ваша функция затем хочет вернуть 'array_keys ($ values)' –

+0

Вы не ответили ни на один из ответов; правильно ли мы понимаем проблему? –

ответ

1

Предполагая, что значение может не отображаться в любом месте массива в 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]); 
    } 
} 
0

Вы должны использовать funciton array_unique.

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

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

+0

Кроме того, это будет возвращать '[1, 3, 5, 2, 6, 9]', что не требуется OP. –

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.

Смежные вопросы