Intereting Posts
PHPUnit загружает все классы одновременно. Вызывает PHP Неустранимая ошибка: не удается переопределить класс Глобальные переменные, обращающиеся к $ var вместо $ _GET Можно ли получить время UNIX с такой даты? 2011-02-27 02:04:46? Значение Textarea не отображается на объекте $ _POST. Можно ли использовать cURL для захвата файлов через SSH? Как создать отношения следопытов, используя Полиморфные отношения Многие-Многие с Laravel? PHP json_encode Проблема с обратным слэшем и именем массива как ограничить определенный домен (ы) электронной почты, а также отправить форму Как реализовать «Режим обслуживания» на уже созданном веб-сайте Ошибка с PHP mail (): множественные или неверные строки, найденные в дополнительном_header PHPMailer – ошибка SMTP: не удалось подключиться к SMTP-хосту Загрузка файлов .sql из PHP Отображения несовместимы друг с другом Использование pdo в php с хранимой процедурой Как написать простой объект в PHP

Как обнаружить повторяющиеся значения в массиве PHP?

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

$array = array('apple', 'orange', 'pear', 'banana', 'apple', 'pear', 'kiwi', 'kiwi', 'kiwi'); 

Я хотел бы напечатать:

 apple (2) orange pear (2) banana kiwi (3) 

Любые советы о том, как подойти к этой проблеме?

Благодарю.

Майк

использовать array_count_values

 $array = array('apple', 'orange', 'pear', 'banana', 'apple', 'pear', 'kiwi', 'kiwi', 'kiwi'); print_r(array_count_values($array)); 

выйдет

 Array ( [apple] => 2 [orange] => 1 [pear] => 2 etc... ) 
 if(count(array_unique($array))<count($array)) { // Array has duplicates } else { // Array does not have duplicates } 
 function array_not_unique( $a = array() ) { return array_diff_key( $a , array_unique( $a ) ); } 

Чтобы избавиться от использования array_unique() . Чтобы определить, есть ли count(array_unique()) использования count(array_unique()) и сравнить с count($array) .

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

 $array = array('apple', 'orange', 'pear', 'banana', 'apple', 'pear', 'kiwi', 'kiwi', 'kiwi'); $new_array = array(); foreach ($array as $key => $value) { if(isset($new_array[$value])) $new_array[$value] += 1; else $new_array[$value] = 1; } foreach ($new_array as $fruit => $n) { echo $fruit; if($n > 1) echo "($n)"; echo "<br />"; } 
 <?php $arr = array(1, 2, 3, 2, 5, 6, 7); print_r(array_count_values($arr)); ?> 

Поместите их в map (псевдокод)

 map[string -> int] $m foreach($word in $array) { if(!$m.contains($word)) $m[$word] = 0; $m[$word] += 1; } 

Возможно, что-то вроде этого (непроверенный код, но должен дать вам идею)?

 $new = array(); foreach ($array as $value) { if (isset($new[$value])) $new[$value]++; else $new[$value] = 1; } 

Затем вы получите новый массив со значениями в качестве ключей, а их значение – количество раз, когда они существовали в исходном массиве.

 $count = 0; $output =''; $ischeckedvalueArray = array(); for ($i=0; $i < sizeof($array); $i++) { $eachArrayValue = $array[$i]; if(! in_array($eachArrayValue, $ischeckedvalueArray)) { for( $j=$i; $j < sizeof($array); $j++) { if ($array[$j] === $eachArrayValue) { $count++; } } $ischeckedvalueArray[] = $eachArrayValue; $output .= $eachArrayValue. " Repated ". $count."<br/>"; $count = 0; } } echo $output;