2015-06-03 26 views
8

Vì vậy, tôi có JSON này Array:PHP: giá trị thường xuyên Hầu hết trong mảng

[0] => 238 
[1] => 7 
[2] => 86 
[3] => 79 
[4] => 55 
[5] => 92 
[6] => 55 
[7] => 7 
[8] => 254 
[9] => 9 
[10] => 75 
[11] => 238 
[12] => 89 
[13] => 238 

tôi sẽ có nhiều giá trị trong file JSON thực tế. Nhưng bằng cách nhìn vào điều này tôi có thể thấy rằng 238 và 55 đang được lặp lại nhiều hơn bất kỳ số nào khác. Những gì tôi muốn làm là nhận được 5 giá trị lặp lại nhiều nhất trong mảng và lưu trữ chúng trong một mảng PHP mới.

+0

FYI: Bạn có thể chấp nhận câu trả lời, người đã giúp bạn nhiều nhất và giải quyết vấn đề của bạn (http://meta.stackexchange.com/q/5234) – Rizier123

+0

gì nếu nhiều giá trị chia sẻ cùng một số sự cố, làm bạn muốn bất kỳ, tất cả hoặc không ai trong số đó. Ví dụ. '[5,4,2,6,7,3,1]' tất cả đều có một sự xuất hiện, bạn sẽ chọn 5 cái nào? – salathe

Trả lời

18
$values = array_count_values($array); 
arsort($values); 
$popular = array_slice(array_keys($values), 0, 5, true); 
  • array_count_values() nhận được đếm số lần mỗi mục xuất hiện trong một mảng
  • arsort() loại mảng bởi số lần xuất hiện theo thứ tự ngược
  • array_keys() được giá trị thực tế đó là mảng trong kết quả từ array_count_values()
  • array_slice() cho chúng tôi năm yếu tố đầu tiên của kết quả

Demo

$array = [1,2,3,4,238, 7, 86, 79, 55, 92, 55, 7, 254, 9, 75, 238, 89, 238]; 
$values = array_count_values($array); 
arsort($values); 
$popular = array_slice(array_keys($values), 0, 5, true); 

array (
    0 => 238, 
    1 => 55, 
    2 => 7, 
    3 => 4, 
    4 => 3, 
) 
+6

'$ this_answer =" làm đẹp "; –

5

Điều quan trọng là phải sử dụng một cái gì đó giống như array_count_values() để kiểm đếm lên số lần xuất hiện của mỗi giá trị.

<?php 

$array = [238, 7, 86, 79, 55, 92, 55, 7, 254, 9, 75, 238, 89, 238]; 

// Get array of (value => count) pairs, sorted by descending count 
$counts = array_count_values($array); 
arsort($counts); 
// array(238 => 3, 55 => 2, 7 => 2, 75 => 1, 89 => 1, 9 => 1, ...) 

// An array with the first (top) 5 counts 
$top_with_count = array_slice($counts, 0, 5, true); 
// array(238 => 3, 55 => 2, 7 => 2, 75 => 1, 89 => 1) 

// An array with just the values 
$top = array_keys($top_with_count); 
// array(238, 55, 7, 75, 89) 

?> 
Các vấn đề liên quan