php: проверьте, имеет ли массив дубликаты

Просто измените определение функции getScores и аргумент объявления class с

`int getScores(FILE *input, Student class);` 

на

`int getScores(FILE *input, Student *class);` 
56
задан dreftymac 30 November 2017 в 12:31
поделиться

5 ответов

Вы можете:

function has_dupes($array) {
    $dupe_array = array();
    foreach ($array as $val) {
        if (++$dupe_array[$val] > 1) {
            return true;
        }
    }
    return false;
}
37
ответ дан 7 November 2019 в 06:17
поделиться
function hasDuplicate($array){
  $d = array();
  foreach($array as $elements) {
    if(!isset($d[$elements])){
      $d[$elements] = 1;
    }else{
      return true;
    } 
  } 
  return false;
}
0
ответ дан 7 November 2019 в 06:17
поделиться

Два способа сделать это эффективно, о которых я могу думать:

  1. вставка всех значений в какой-то хеш-таблица и проверка того, находится ли в ней вставляемое вами значение (ожидаемое время O (n) и пространство O (n))

  2. , сортировка массива и затем проверка, равны ли соседние ячейки (время O (nlogn) и O (1) или O (n) пробел в зависимости от алгоритма сортировки)

решением stormdrain, вероятно, будет O (n ^ 2), как и любое решение, которое включает сканирование массива для каждого элемента в поисках дубликата

0
ответ дан 7 November 2019 в 06:17
поделиться

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

Почему бы вам не использовать array_count_values ​​() , а затем проверить, имеет ли результирующий массив какое-либо значение больше 1?

-1
ответ дан 7 November 2019 в 06:17
поделиться

Я знаю, что вам не нужен array_unique(). Однако вы не найдете волшебной очевидной функции, и ее написание не будет быстрее, чем использование родных функций.

Я предлагаю:

function array_has_dupes($array) {
   // streamline per @Felix
   return count($array) !== count(array_unique($array));
}

Настроить второй параметр array_unique() для удовлетворения ваших потребностей в сравнении.

188
ответ дан 7 November 2019 в 06:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: