Verilen verilerden en ortak değerleri bulma

4 Cevap php

Ben şöyle bir veri var ...

+----------+----------+----------+
| Column 1 | Column 2 | Column 3 |
+----------+----------+----------+
|   Red    |   Blue   |   Green  |
|  Yellow  |   Blue   |   Pink   |
|  Black   |   Grey   |   Blue   |
+--------------------------------+

Ben bu verilerin geçmesi ve 3 en yaygın renkleri bulmak gerekir.

Ham veriler CSV ve daha binlerce satır olması ihtimali var. (link)

Bunu yapmanın en iyi yolu nedir?

4 Cevap

Sihirli ... defada bir satır, her seferinde bir sütun var.

Ve her renk sayılır.

Tüm değerleri döngü dizisi (kelime => sayımı) bunların her birinin sayısını tutarken. Bunu yaptıktan sonra, yüksek değerlere sahip anahtarları bulmak.

Olası renk sayısı yönetilebilir ise, sadece bir ilişkisel dizi kullanmak için:

$histo = array();

//foreach cell
  $color = ??; //however you're getting a cell's value
  if(!isset($histo[$color]))
    $histo[$color] = 1;
  else
    $histo[$color]++;
//end loop

//reverse sort by value
$histo = arsort($histo);

//now the first three colors in $histo are the most common ones.

PHP ve bir veritabanı işleme yapıyoruz ve dosya tamamen renk adlarını içeriyorsa, ben gibi bir şey ile gitmek istiyorum:

$colors = array();

$fh = fopen('data.txt');
while($row = fgetcsv($fh)) { // omitting length/delimiter arguments
    foreach($row as $field) {
        $colors[$field]++;
    }
}
fclose($fh);

$colors = arsort($colors); // sort in decescending order

Bundan sonra ilk 3 renk $colors ilk unsurlar olacaktır.