2013-02-23 32 views
1

enter image description here我有一個元素數組,每個元素都有1或0。我想通過每個元素並計算哪些元素具有最多的1。如何跟蹤for循環中的基數?

所以我有三個領域:

ID,問題和YESNO

值是這樣的:

1,1,0 
1,2,0 
1,3,1 
1,4,0 
1,5,1 
2,1,0 
2,2,1 
2,3,1 
2,4,0 
2,5,1 
3,1,0 
3,2,1 
3,3,1 
3,4,0 
3,5,1 

這是它的要點。現在,我想要計算中間列中的哪些元素,第三列中的最多1。用另一種方式解釋它。我想遍歷for循環並計算中間數字爲「1」的次數。後來,我打算弄清楚哪一個人的人數最多。我該如何做這種類型的迭代?

如果問題混淆,請提問!我很困惑自己......!

+0

一旦你計算中間列爲「1」的次數,你想要什麼? – 2013-02-23 09:27:05

+0

基本上,我想弄清楚哪個中間欄最「1」。如果您注意到,中間列週期爲12345,12345,12345。換句話說,如果檢出字段名稱,則存在問題(中間列)和是/否(由1或0表示)。我想找出哪些問題最「肯定」。意思是12345中哪一個的1s最多。 – 2013-02-23 09:28:29

+0

我添加了一個圖像,它應該是有幫助的 – 2013-02-23 09:37:04

回答

4

如果這是一個數據庫裏面,你可以使用這個SQL:

SELECT question_id, SUM(value = 1) AS value 
FROM mytable 
GROUP BY question_id 
ORDER BY value DESC 
LIMIT 1; 
  1. SUM(value = 1)計數每個yesno值的出現等於1;
  2. 使用GROUP BY question_id它計算#1%的問題
  3. 然後你爲了它的基礎上出現的降序排列的號碼(第一爲最高)
  4. 採取的第一項。
+0

你介意解釋一下嗎?它是如何工作的?而且,這是否是最好的方法呢?而不是運行一個PHP的循環? – 2013-02-23 09:41:46

+0

@DanielFein好的,完成:) – 2013-02-23 09:44:40

+0

@DanielFein是的,只要數據庫操作合理可行,數據庫操作在數據庫中的處理要比在PHP中要好得多;) – 2013-02-23 09:46:31

1

如果仍然者優先做在PHP:

$counts=array(); 
foreach($arr as $v) @$counts[$v['movie_id']]+=$v['value']; 

我們做一個空數組,然後此數組中添加$v['value']該項目與關鍵$v['movie_id']。如果密鑰尚未存在,則會創建值爲0,並根據您的PHP設置顯示通知。放置在PHP命令前的符號@可以抑制該行中生成的通知和警告。

+0

這將返回什麼?我從來沒有見過像這樣的@符號或雙括號。 – 2013-02-23 09:50:28

+0

已編輯。更好?是的,沒有「雙括號」存在,它們只是兩個彼此相鄰的「單個括號」。 – 2013-02-23 09:59:37

+0

是的,謝謝,只是要清楚,我應該用question_id替換movie_id嗎? – 2013-02-23 10:12:38