2016-11-09 8 views
5
[{"id":"15","heading":"Post1","content":"Post 1 Content","date":"2016-11-09 08:51:37"}, 
{"id":"16","heading":"Post2","content":"Post 2 Content","date":"2016-11-09 08:52:09"}, 
{"id":"17","heading":"Post3","content":"Post 3 Content","date":"2015-06-09 08:52:09"}] 

मेरे पास JSON सरणी से ऊपर/retransform को संशोधित/पुन: ट्रांसफर करने के लिए कैसे करें। मुझे लगता है मैं द्वाराJSON सरणी संरचना

while ($row = mysqli_fetch_row($result)) { 
    $year = date('Y', strtotime($row['2'])); 
    $month = date('M', strtotime($row['2'])); 
    $navarray[$year][$month][] = array($row[0], $row[1], $row[3]); 
} 

PHP में इस लक्ष्य को हासिल करने में सक्षम था के रूप में

2016 
    Nov 
     Post1 
     Post2 
2015 
    June 
     Post3 

एक JSON वस्तु में परिवर्तित करने के लिए कोशिश कर रहा हूँ लेकिन जे एस में यह पता लगा नहीं कर सकता।

+0

मैं अंडरस्कोर लाइब्रेरी में आउटपुट JSON ऑब्जेक्ट पास कर दूंगा। लेकिन अगर मैं diff सरणी संरचना प्राप्त कर सकता हूं तो यह भी काम करेगा। – unkn0wn

उत्तर

4

पीएचपी के विपरीत आप वस्तुओं को बनाने चाहिए अगर वे नहीं है मौजूद है:

var monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] 
 

 
ar = [{"id":"15","heading":"Post1","content":"Post 1 Content","date":"2016-11-09 08:51:37"}, 
 
{"id":"16","heading":"Post2","content":"Post 2 Content","date":"2016-11-09 08:52:09"}, 
 
{"id":"17","heading":"Post3","content":"Post 3 Content","date":"2015-06-09 08:52:09"}] 
 

 
obj = {} 
 
ar.forEach(function(v) { 
 
    d = new Date(v.date); 
 
    m = monthNames[d.getMonth()] 
 
    if (!obj.hasOwnProperty(d.getFullYear())) { 
 
    obj[d.getFullYear()] = {} 
 
    } 
 
    if (!obj[d.getFullYear()].hasOwnProperty(m)) { 
 
    obj[d.getFullYear()][m] = [] 
 
    } 
 
    obj[d.getFullYear()][m].push(v.heading) 
 
}) 
 
console.log(obj)

+0

बहुत बहुत धन्यवाद! मैंने रेगेक्स अभिव्यक्तियों का उपयोग करके एक घंटे से अधिक समय बिताया और ढेर बनाने और सभी को बिताया! – unkn0wn

+0

खुशी मैं मदद कर सकता हूं :) – Dekel

2

आप पाश कर सकते हैं, और प्रत्येक आइटम के लिए, चालू वर्ष और महीने के अस्तित्व की जाँच बताया अगर यह अभी तक अस्तित्व में नहीं है।

var result = {}; 
 
var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] 
 

 
var j = [{"id":"15","heading":"Post1","content":"Post 1 Content","date":"2016-11-09 08:51:37"}, 
 
{"id":"16","heading":"Post2","content":"Post 2 Content","date":"2016-11-09 08:52:09"}, 
 
{"id":"17","heading":"Post3","content":"Post 3 Content","date":"2015-06-09 08:52:09"}]; 
 

 
for(var i = 0; i<j.length; i++) { 
 
    var d = new Date(j[i].date); 
 
    var year = ""+d.getFullYear(); 
 
    var month = months[d.getMonth()]; 
 

 
    if(!result.hasOwnProperty(year)) { 
 
     result[year] = {}; 
 
    } 
 

 
    if(!result[year].hasOwnProperty(month)) { 
 
     result[year][month] = []; 
 
    } 
 

 
    result[year][month].push(j[i].heading); 
 
} 
 

 
console.log(result);

2

निम्नलिखित यात्रा ओपी में पीएचपी नमूना कोड

var arr1 = [ 
 
    {"id":"15","heading":"Post1","content":"Post 1 Content","date":"2016-11-09 08:51:37"}, 
 
    {"id":"16","heading":"Post2","content":"Post 2 Content","date":"2016-11-09 08:52:09"}, 
 
    {"id":"17","heading":"Post3","content":"Post 3 Content","date":"2015-06-09 08:52:09"} 
 
]; 
 
var struct2 = {}; 
 

 
arr1.forEach(function(row) { 
 
    var date = new Date(row.date); // will extract date parts form Date object 
 
    var yyyy = date.getFullYear(); 
 
    var mm = date.getMonth() + 1; // months come zero-indexed (from 0-11) 
 
    if (mm < 10) mm = '0' + mm; // left pad if needed 
 
    struct2[yyyy] = struct2[yyyy] || {}; // init if needed 
 
    struct2[yyyy][mm] = struct2[yyyy][mm] || []; // init if needed 
 
    delete row.date; // drop date if desired 
 
    struct2[yyyy][mm].push(row); // add new record 
 
}); 
 

 
console.log(struct2); 
 

 
/* fragment below is an extention to answer 
 
* 2nd concern about how to iterate over this nested structure */ 
 
var panel = document.createElement('div'); 
 
document.body.appendChild(panel); 
 
for (var year in struct2) { 
 
    for (var month in struct2[year]) { 
 
    var section = '<h2>' + year + '-' + month + '</h2>'; 
 
    console.log('section: ' + section); 
 
    panel.innerHTML += section; 
 
    for (var i in struct2[year][month]) { 
 
     var item = struct2[year][month][i]; 
 
     var content = '<div id="' + item.id + '">'; 
 
     content += '<h3>' + item.heading + '</h3>'; 
 
     content += '<p>' + item.content; 
 
     content += '</div>'; 
 
     console.log('content: ' + content); 
 
     panel.innerHTML += content; 
 
    } 
 
    } 
 
}

संपादित के अनुसार अपने संरचना में परिवर्तित कर देंगे: के माध्यम से पाशन बारे में आपकी चिंता का जवाब देने के लिए बढ़ाया नेस्टेड संरचना

+0

पिछले दो प्रकारों को संपादित करने के लिए केवल एक ही बनाने के लिए संपादित किया गया है, लेकिन यदि आंतरिक कुंजी की आवश्यकता नहीं है तो – arhak

+0

मैं इस 2 डी सरणी में कैसे लूप कर सकता हूं? – unkn0wn

+1

विस्तारित उत्तर देखें – arhak

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