2012-09-24 15 views
5

तो मुझे क्या यह:json_encode के लिए अलग परिणाम() पीएचपी

$new_arr = array(
0 => 'keyboard', 
1 => 'mouse', 
2 => 'computer' 
); 

print_r(json_encode($new_arr)); 

आउटपुट:

[ "कीबोर्ड" "माउस", "कंप्यूटर"]

लेकिन कहें कि मैं अपने डेटाबेस से "उत्पाद" तालिका की सभी पंक्तियां प्राप्त करता हूं और मैं यह करता हूं:

$product_with_id_map = array(); 
foreach($query as $result) { 
$product_with_id_map[$result->id] = $result->name; 
} 
print_r(json_encode($product_with_id_map)); 

आउटपुट:

{ "0": "कीबोर्ड", "1": "माउस", "2": "कंप्यूटर"}

मैं वास्तव में के प्रमुख बनाए रखने की आवश्यकता सरणी जब मैं json_encode भी आपको बता सकता हूं कि पहले उदाहरण में दूसरा आउटपुट कैसे प्राप्त किया जाए?

+1

बस मुझे आपका प्रश्न सही है: दूसरा आउटपुट फॉर्म वांछित है, है ना? – vzwick

+0

हाँ, मैं वास्तव में अपने json_encode –

+2

* में सरणी कुंजी को बनाए रखना चाहता हूं * जब मैं json_encode ... "* वास्तव में आपके पास है, तो मुझे सरणी की कुंजी को बनाए रखने की आवश्यकता है।" दोनों उदाहरणों में चाबियाँ समान हैं। लेकिन पहला एक सरणी है, दूसरा केवल संपत्ति की चाबियों वाला एक ऑब्जेक्ट है जिसमें पूरी तरह से अंक हैं। यदि इस JSON को डीकोड करने वाली भाषा जावास्क्रिप्ट है, तो यह बहुत सूक्ष्म अंतर है (जैसे सरणी कुंजी जावास्क्रिप्ट में तार हैं - [हाँ, वास्तव में] (http://blog.niftysnippets.org/2011/01/myth-of-arrays। एचटीएमएल))। अन्य भाषाओं में भिन्नता हो सकती है। –

उत्तर

6

ऑब्जेक्ट को ऑब्जेक्ट कास्ट करें।

$new_arr = array(
    0 => 'keyboard', 
    1 => 'mouse', 
    2 => 'computer' 
); 

print_r(json_encode((object)$new_arr)); 
// output: {"0":"keyboard","1":"mouse","2":"computer"} 

अलावा: आप जावास्क्रिप्ट में इस परिणाम का उपयोग करते हैं, मैं तुम्हें सरणी का उपयोग करने का सुझाव, सरणी भी जावास्क्रिप्ट में, वस्तु है के अलावा, यह अधिक तरीकों और आप को length संपत्ति प्रदान करते हैं।

+0

हाँ सही काम करता है, क्या आप कृपया मुझे बता सकते हैं कि मुझे अलग-अलग परिणाम क्यों मिले? –

+0

@ user1537158 - क्योंकि एरे जेएसओएन में ऑब्जेक्ट्स के लिए अलग-अलग काम करते हैं। – vzwick

+0

@xdazz: आपको सरणी को ऑब्जेक्ट में बदलने की भी आवश्यकता नहीं है। Json_encode के आउटपुट में कुंजी हो सकती है, क्योंकि वह सरणी बनाने के लिए एक incremental संख्या अनुक्रम का उपयोग कर रहा है, json_encode आउटपुट कुंजी को छोड़ रहा है। वह वास्तव में तब प्रभावित नहीं होता जब वह json_encoded स्ट्रिंग को सरणी में परिवर्तित करने के लिए परिवर्तित करता है, चाबियाँ बढ़ती अनुक्रम में वापस आ जाएंगी।कुंजी '1' से '4' को बदलने का प्रयास करें और json_encode आउटपुट –

8

विकल्पों का उपयोग करके (since PHP 5.3):

print_r(json_encode($product_with_id_map, JSON_FORCE_OBJECT)); 
2

इसका कारण यह है अनुक्रमित है कि डेटा बेस से लौटे किया जा रहा है तारों के रूप में वापस आ रहे हैं हो रहा है और इसलिए है JSON में भी इनकोडिंग जा रहा है। जहां आप स्वयं सरणी बना रहे हैं, आप उन्हें पूर्णांक के रूप में सेट कर रहे हैं और इसलिए उन्हें अनदेखा किया जा रहा है।

आप या तो

$new_arr = array(
'0' => 'keyboard', 
'1' => 'mouse', 
'2' => 'computer' 
); 

print_r(json_encode($new_arr)); 

की कोशिश कर सकते हैं या आप एक वस्तु जो अनुक्रमित सुरक्षित करेगा में सरणी trun सकता है।

print_r(json_encode((object)$new_arr)); 
+0

कोड का पहला भाग काम नहीं करेगा, जब तक आप सरणी नहीं डालते तब तक कोई दुविधा नहीं होती वस्तु। – xdazz

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