2010-08-24 18 views
9

क्रम में नहीं हैं, लेकिन इसके अनुसार: http://www.php.net/manual/en/function.json-encode.php#94157 यह नहीं होगा।मैं जेएसओएनएनकोड को PHP में जेएसओएन सरणी वापस करने के लिए चाहता हूं, भले ही सूचकांक

jsonp1282668482872 ({"label":"Hits 2010-08-20","data":{"1281830400":34910,"1281916800":45385,"1282003200":56928,"1282089600":53884,"1282176000":50262,"1281657600":45446,"1281744000":34998}}); 

तो flot घुट जाता है:

मैं flot उपयोग कर रहा हूँ तो मैं सांख्यिक अनुक्रमित के साथ लौटे एक सरणी लेकिन क्या मैं हो रही है की जरूरत यह है। मैं सरणी var_dump तो सही से पहले मैं फोन json_encode यह इस तरह दिखता है:

array(7) { 
    [1281830400]=> 
    int(34910) 
    [1281916800]=> 
    int(45385) 
    [1282003200]=> 
    int(56928) 
    [1282089600]=> 
    int(53884) 
    [1282176000]=> 
    int(50262) 
    [1281657600]=> 
    int(45446) 
    [1281744000]=> 
    int(34998) 
} 

किसी भी विचार?

+0

संबंधित प्रश्न http://stackoverflow.com/questions/11195692/json-encode-sparse-php-array-as-json-array-not-json-object –

उत्तर

7

यह अवधारणात्मक रूप से असंभव है। आप जेएसओएन में निश्चित सूचकांक के साथ एक सरणी एन्कोड नहीं कर सकते हैं।

आपको बता दें कि एक JSON सारणी इस तरह दिखता है:

[1, 2, 3, 4, 5] 

कोई जगह नहीं सूचकांक डाल करने के लिए नहीं है।

आपको जावास्क्रिप्ट पक्ष पर काम करना चाहिए। यह स्वीकार करते हुए कि json_encode एक ऑब्जेक्ट लौटाएगा, आप इस ऑब्जेक्ट को सरणी में बदल सकते हैं। यह बहुत कठिन नहीं होना चाहिए।

function toArray(object) 
{ 
    var result = []; 
    for (var key in object) 
    { 
     if (!key.match(/^[0-9]+$/)) throw new Error("Key must be all numeric"); 
     result[parseInt(key)] = object[key]; 
    } 
    return result; 
} 
+0

मुझे लगता है कि यह ठीक करने के लिए और अधिक समझदार होगा PHP के आकार पर सरणी यदि ओपी पर इसका नियंत्रण होता है, जो ऐसा लगता है जैसे वे करते हैं। एक के लिए, यह मामूली तेजी से होना चाहिए और परिणामस्वरूप (मुश्किल) ग्राहक को कम डेटा भेजा जाएगा। – pr1001

+0

@ pr1001: यदि आप करते हैं तो आप सभी महत्वपूर्ण जानकारी खो देंगे।चूंकि चाबियाँ टाइमस्टैम्प हैं, मुझे विश्वास है कि वे महत्वपूर्ण हैं। – zneak

+0

मैं सहमत हूं, लेकिन जैसा कि मैंने और मैंने पोस्ट किया है, मुझे लगता है कि वह पहले स्थान पर आवश्यक सरणी प्रारूप पर गलत है। – pr1001

0

आप एक संख्यानुसार अनुक्रमित सरणी पुन: अनुक्रमणिका के लिए, इस तरह array_merge उपयोग कर सकते हैं:

$a = array(2 => 3, 4 => 5); 
$a = array_merge($a); 
var_dump($a); 
+0

वह कुंजी खो देगा, और कुंजी महत्वपूर्ण प्रतीत होती है। – zneak

+0

उस स्थिति में उसे एक JSON ऑब्जेक्ट की आवश्यकता है, एक सरणी ऐसा नहीं करेगी। – Robin

5

आप json_decode() दूसरा पैरामीटर के रूप में सही पारित करके सरणियों निर्माण करने के लिए मजबूर कर सकते हैं, लेकिन आप json_encode() बाध्य नहीं कर सकता पहली जगह में सरणियों निर्माण करने के लिए:

json_decode($json, TRUE); // force array creation 
24

zneak कहते हैं, जावास्क्रिप्ट (और इस प्रकार JSON) सरणियों बाहर के आदेश सरणी कुंजी नहीं हो सकता।

json_encode(array_values($data)); 

हालांकि, यह लगता है कि आप flot साथ समय श्रृंखला डेटा प्रदर्शित करने के लिए देख रहे हैं की तरह: इस प्रकार, आप या तो स्वीकार करते हैं कि आप JSON ऑब्जेक्ट, नहीं सरणियों के साथ काम करेंगे, या फोन array_valuesjson_encode से पहले की जरूरत है। आप flot time series example पर देख सकते हैं, यह बहुत की तरह एक दो तत्व सरणी होना चाहिए:

$.plot(
    $('#placeholder'), 
    [[ 
    [1281830400, 34910], 
    [1281916800, 45385], 
    [1282003200, 56928], 
    [1282089600, 53884], 
    [1282176000, 50262], 
    [1281657600, 45446], 
    [1281744000, 34998] 
    ]], 
    { 
    label: 'Hits 2010-08-20', 
    xaxis: {mode: 'time'} 
    } 
) 

को देखते हुए अपने सरणी हम इतनी तरह उचित JSON प्राप्त कर सकते हैं (यह $data कॉल):

json_encode(
    array_map(
    function($key, $value) { return array($key, $value); }, 
    array_keys($data), 
    array_values($data) 
) 
); 
+0

यह बढ़िया है, मैंने एक लूप के साथ जेएसओएन उत्पन्न करके एक ही परिणाम प्राप्त किया लेकिन मुझे आपके समाधान को बेहतर पसंद है। धन्यवाद! –

+0

मदद करने के लिए खुशी हुई। अगर आपको लगता है कि यह आपके प्रश्न का उत्तर देता है तो कृपया इसे उत्तर के रूप में चिह्नित करें। – pr1001

+0

Googleिंग के 6 घंटों के बाद, आपने फ्लोट में ग्राफ के लिए उचित JSON तैयार करने की मेरी समस्या हल कर दी है। धन्यवाद! – newyuppie

0

फ्लोट के लिए, जो आप पूछ रहे हैं वह वास्तव में वह नहीं है जो आप चाहते हैं। आप सरणी की सरणी चाहते हैं, संख्याओं की सरणी नहीं। यही है, आप ऐसा कुछ दिखाना चाहते हैं:

[[1281830400, 34910], 
    [1281916800, 45385], 
    [1282003200, 56928], 
    [1282089600, 53884], 
    [1282176000, 50262], 
    [1281657600, 45446], 
    [1281744000, 34998]] 

PHP में ऐसा करने के लिए, मुझे यकीन नहीं है।

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

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