2012-04-09 63 views
4

我正在努力解決之前已經解決的數組問題。我能想到的最好的比喻是產品比較功能,其中選擇了2-3種產品並列出了它們的特性供用戶比較。排序常見的屬性數組

我有特點的2-3個陣列。這些陣列可以具有相同的特徵。我需要並排顯示數組的表格,其中元素按「最常見」排序。因此,如果所有三個陣列都具有相同的特性,它將位於頂部。然後列出兩個相似的特徵,等等。如果兩個數組共享一個特徵,則第三個數組將具有空白單元格。

後端是用PHP編寫。前端是Javascript。我正在使用Underscore來實現其他功能,所以它的數組功能可用。

我不能讓我的周圍事物的組合的頭,我必須做的,使這項工作!任何幫助是極大的讚賞!

+0

你可以發表你的數組結構,以便我們瞭解你的數組結構。會幫助很多。 – 2012-04-09 11:44:05

+0

你如何獲取數據?數據庫排序可能更合適。 – ajreal 2012-04-09 11:45:58

+0

你是什麼'characteristics'意思??? – Baba 2012-04-09 11:46:12

回答

1

我設法找到一個解決方案,我認爲覆蓋這個問題,在使用二級結構來記錄每個類別的頻率與所述建議的工作從mainegreen,並且其比較了使用該頻率數組的值自定義排序功能。下面的示例實現;

function getCategories(products) { 
var categories = [], frequency = {}; 
for (var i = 0; i < products.length; i++) { 
    for (var c in products[i]) { 
     if (products[i].hasOwnProperty(c)) { 
      if (frequency.hasOwnProperty(c)) { 
       frequency[c]++; 
      } else { 
       categories.push(c); 
       frequency[c] = 1; 
      } 
     } 
    } 
} 
categories.sort(function (a,b) { return frequency[b]-frequency[a]; }); 
return categories; 
} 

這將適用於下面的一系列產品;

var products = [ 
    { 
     cat1: 'val1', 
     cat2: 'val1', 
    }, { 
     cat2: 'val2', 
     cat3: 'val2', 
    }, { 
     cat2: 'val3', 
     cat3: 'val3', 
     cat4: 'val3', 
    } 
]; 
0

如果我理解正確的話,我不知道我這樣做,但如果你想的是,每個陣列的「特徵」進行排序,最共享在上市以這樣的方式在多個陣列項目進行排序頂部,那麼你是否可以沒有用於實現共享特性計數的輔助數組?所以你可以循環訪問你的第一組數組,並且在找到每個特徵後,爲這個特徵增加一個計數器。

然後,當你上顯示程序你將有你用來相符的特徵計數陣列上的循環日常工作?

0

您可以合併產品array_keys()進行比較,然後通過鍵(==「特性」)循環並將它們分類爲三個新陣列('shared','common','uncommon')。

有了這樣的陣列,重建產品陣列留下空字段用於非使用的密鑰。