2015-09-21 5 views
5

मेरे पास डेटाबेस क्वेरी के परिणामस्वरूप एक सरणी है। रेखाओं में दो आयाम और कुछ मीट्रिक शामिल हैं। मेट्रिक्स को आयाम समूहों द्वारा सारांशित किया जाना चाहिए। enter image description herePHP डेटाबेस परिणामों से एकाधिक आयामों के साथ एक ऐरे ग्रुपिंग

यहाँ सटीक सरणी है:

यहाँ एक उदाहरण तालिका दृश्य में कच्चे डेटा सरणी है enter image description here

:

array(13) { 
    [0]=> 
    array(6) { 
    ["source_name"]=> 
    string(8) "A" 
    ["week"]=> 
    string(2) "10" 
    ["picks"]=> 
    int(1) 
    ["won"]=> 
    int(0) 
    ["lost"]=> 
    int(1) 
    ["draw"]=> 
    int(0) 
    } 
    [1]=> 
    array(6) { 
    ["source_name"]=> 
    string(8) "A" 
    ["week"]=> 
    string(2) "10" 
    ["picks"]=> 
    int(1) 
    ["won"]=> 
    int(1) 
    ["lost"]=> 
    int(0) 
    ["draw"]=> 
    int(0) 
    } 
    [2]=> 
    array(6) { 
    ["source_name"]=> 
    string(8) "A" 
    ["week"]=> 
    string(2) "11" 
    ["picks"]=> 
    int(1) 
    ["won"]=> 
    int(1) 
    ["lost"]=> 
    int(0) 
    ["draw"]=> 
    int(0) 
    } 
    [3]=> 
    array(6) { 
    ["source_name"]=> 
    string(8) "A" 
    ["week"]=> 
    string(2) "11" 
    ["picks"]=> 
    int(1) 
    ["won"]=> 
    int(1) 
    ["lost"]=> 
    int(0) 
    ["draw"]=> 
    int(0) 
    } 
    [4]=> 
    array(6) { 
    ["source_name"]=> 
    string(8) "A" 
    ["week"]=> 
    string(2) "11" 
    ["picks"]=> 
    int(1) 
    ["won"]=> 
    int(0) 
    ["lost"]=> 
    int(1) 
    ["draw"]=> 
    int(0) 
    } 
    [5]=> 
    array(6) { 
    ["source_name"]=> 
    string(8) "A" 
    ["week"]=> 
    string(2) "11" 
    ["picks"]=> 
    int(1) 
    ["won"]=> 
    int(0) 
    ["lost"]=> 
    int(1) 
    ["draw"]=> 
    int(0) 
    } 
    [6]=> 
    array(6) { 
    ["source_name"]=> 
    string(8) "A" 
    ["week"]=> 
    string(2) "11" 
    ["picks"]=> 
    int(1) 
    ["won"]=> 
    int(1) 
    ["lost"]=> 
    int(0) 
    ["draw"]=> 
    int(0) 
    } 
    [7]=> 
    array(6) { 
    ["source_name"]=> 
    string(7) "B" 
    ["week"]=> 
    string(2) "10" 
    ["picks"]=> 
    int(1) 
    ["won"]=> 
    int(0) 
    ["lost"]=> 
    int(1) 
    ["draw"]=> 
    int(0) 
    } 
    [8]=> 
    array(6) { 
    ["source_name"]=> 
    string(7) "B" 
    ["week"]=> 
    string(2) "10" 
    ["picks"]=> 
    int(1) 
    ["won"]=> 
    int(1) 
    ["lost"]=> 
    int(0) 
    ["draw"]=> 
    int(0) 
    } 
    [9]=> 
    array(6) { 
    ["source_name"]=> 
    string(7) "B" 
    ["week"]=> 
    string(2) "11" 
    ["picks"]=> 
    int(1) 
    ["won"]=> 
    int(0) 
    ["lost"]=> 
    int(1) 
    ["draw"]=> 
    int(0) 
    } 
    [10]=> 
    array(6) { 
    ["source_name"]=> 
    string(7) "B" 
    ["week"]=> 
    string(2) "11" 
    ["picks"]=> 
    int(1) 
    ["won"]=> 
    int(1) 
    ["lost"]=> 
    int(0) 
    ["draw"]=> 
    int(0) 
    } 
    [11]=> 
    array(6) { 
    ["source_name"]=> 
    string(9) "C" 
    ["week"]=> 
    string(2) "11" 
    ["picks"]=> 
    int(1) 
    ["won"]=> 
    int(1) 
    ["lost"]=> 
    int(0) 
    ["draw"]=> 
    int(0) 
    } 
    [12]=> 
    array(6) { 
    ["source_name"]=> 
    string(9) "C" 
    ["week"]=> 
    string(2) "11" 
    ["picks"]=> 
    int(1) 
    ["won"]=> 
    int(1) 
    ["lost"]=> 
    int(0) 
    ["draw"]=> 
    int(0) 
    } 
} 

यहाँ मैं आउटपुट के रूप में प्राप्त करने की उम्मीद है उस आउटपुट को पाने का सबसे अच्छा तरीका क्या है?

धन्यवाद।

+0

तो, सरणी पर लूप करें और मानों को एक नई सरणी में जोड़ दें। यह मुझे स्पष्ट नहीं है कि आप कहां फंस गए हैं। – GolezTrol

+0

क्या यह सरणी डेटाबेस क्वेरी का परिणाम है? – CodeGodie

+0

@CodeGodie वास्तव में मैं यह नहीं समझ सका कि मैं एकाधिक लूप के बिना समूह और योग कैसे कर सकता हूं। और, हाँ, यह डेटाबेस क्वेरी का परिणाम है। – user1488895

उत्तर

5

आप बस की तरह के रूप में

$result = []; 
foreach($data as $key => $value){ 
    $hash = $value['source_name'] ."_". $value['week']; 

    if(isset($result[$hash])){ 
     $result[$hash]['picks'] += $value['picks']; 
     $result[$hash]['won'] += $value['won']; 
     $result[$hash]['lost'] += $value['lost']; 
     $result[$hash]['draw'] += $value['draw']; 
    }else{ 
     $result[$hash] = $value; 
    } 
} 
print_r(array_values($result)); 
+1

मुझे समझ में नहीं आता कि उस और शाखा में क्या हो रहा है ... क्या यह '$ परिणाम [$ हैश] = $ मूल्य नहीं होना चाहिए;'? – GolezTrol

+0

ओएमजी! मैंने नहीं देखा कि मैंने अपना जवाब @GolezTrol अपडेट किया है।इंगित करने के लिए धन्यवाद मैंने अभी जवाब पोस्ट किया है और विंडो –

+0

@GolezTrol को बंद कर दिया है, यहां तक ​​कि मैं सोच रहा हूं कि इसे डाउनवॉट नहीं किया गया है –

3

आपने कहा इस सरणी एक डेटाबेस क्वेरी का परिणाम है यहाँ पर foreach कर सकते हैं। इस प्रकार, आपको इस तरह के परिणामों के माध्यम से पुन: प्रयास नहीं करना चाहिए, आपका ध्यान यह होना चाहिए कि आप अपने डेटाबेस से इन परिणामों को कैसे प्राप्त कर रहे हैं क्योंकि SQL बेहतर प्रदर्शन के साथ आपके लिए यह गणित कर सकता है।

आप इस दिखाने के लिए, मान लें कि आपकी डेटाबेस तालिका my_table नाम पर है और सभी जानकारी आप ऊपर तैनात हैं: (source_name, week, picks, won, lost, draw):

+-------------+------+-------+-----+------+------+ 
| source_name | week | picks | won | lost | draw | 
+-------------+------+-------+-----+------+------+ 
| A   | 10 | 1  | 0 | 1 | 0 | 
+-------------+------+-------+-----+------+------+ 
| A   | 10 | 1  | 1 | 0 | 0 | 
+-------------+------+-------+-----+------+------+ 
| A   | 11 | 1  | 1 | 0 | 0 | 
+-------------+------+-------+-----+------+------+ 
| A   | 11 | 1  | 1 | 0 | 0 | 
+-------------+------+-------+-----+------+------+ 
| A   | 11 | 1  | 0 | 1 | 0 | 
+-------------+------+-------+-----+------+------+ 
| A   | 11 | 1  | 0 | 1 | 0 | 
+-------------+------+-------+-----+------+------+ 
| A   | 11 | 1  | 1 | 0 | 0 | 
+-------------+------+-------+-----+------+------+ 
| B   | 10 | 1  | 0 | 1 | 0 | 
+-------------+------+-------+-----+------+------+ 
| B   | 10 | 1  | 1 | 0 | 0 | 
+-------------+------+-------+-----+------+------+ 
| B   | 11 | 1  | 0 | 1 | 0 | 
+-------------+------+-------+-----+------+------+ 
| B   | 11 | 1  | 1 | 0 | 0 | 
+-------------+------+-------+-----+------+------+ 
| C   | 11 | 1  | 1 | 0 | 0 | 
+-------------+------+-------+-----+------+------+ 
| C   | 11 | 1  | 1 | 0 | 0 | 
+-------------+------+-------+-----+------+------+ 

आप चलाते हैं SQL क्वेरी के बाद, आपको बिना वांछित या लूपिंग के बारे में चिंता किए बिना आपके वांछित परिणाम प्राप्त होंगे।

SELECT source_name, week, sum(picks), sum(won), sum(lost), sum(draw) 
FROM my_table 
GROUP BY source_name, week 
ORDER BY source_name 

परिणाम:

+-------------+------+------------+----------+-----------+-----------+ 
| source_name | week | sum(picks) | sum(won) | sum(lost) | sum(draw) | 
+-------------+------+------------+----------+-----------+-----------+ 
| A   | 10 | 2   | 1  | 1   | 0   | 
+-------------+------+------------+----------+-----------+-----------+ 
| A   | 11 | 5   | 3  | 2   | 0   | 
+-------------+------+------------+----------+-----------+-----------+ 
| B   | 10 | 2   | 1  | 1   | 0   | 
+-------------+------+------------+----------+-----------+-----------+ 
| B   | 11 | 2   | 1  | 1   | 0   | 
+-------------+------+------------+----------+-----------+-----------+ 
| C   | 11 | 2   | 2  | 0   | 0   | 
+-------------+------+------------+----------+-----------+-----------+ 

चेक बाहर इस SQL FIDDLE मदद से आप यह समझ

संबंधित मुद्दे