2010-04-28 16 views
12

परिवर्तनीय $ d file_get_contents फ़ंक्शन से यूआरएल में आता है। मैं प्रत्येक तत्व का मान कैसे निकालते हैं और एक सरणी में जोड़ सकते हैंPHPX ऐरे

SimpleXMLElement Object 
(
    [Amount] => 2698 
    [Status] => OK 
    [State] => FL 
    [Country] => USA 
) 

:

$answer = @new SimpleXMLElement($d); 

नीचे print_r ($ जवाब) के उत्पादन में है? इसे समझ नहीं सकते।

उत्तर

9

$ उत्तर पहले ही एक सरणी के रूप में काम कर सकता है। आप इस सरल मामले प्रकार कास्टिंग में

$array = array(); 
    foreach($answer as $k => $v) { 
    $array[$k] = $v; 
    } 
+0

मैं निम्नलिखित तरीके –

37

यदि आप एक वास्तविक सरणी में डाल दिया चाहते हैं यह कर सकते हैं, यह भी काम करेगा:

$my_array = (array)$answer 
+0

यह तेज और आसान था में एक SimpleXMLElement वस्तु के माध्यम से पुनरावृति नहीं कर सकते। एक जादू की तरह काम किया! धन्यवाद! – cbloss793

0

इस समारोह सरणी पुनरावर्ती

करने के लिए एक एक्सएमएल SimpleXML पुनरावर्ती पार्स
function SimpleXML2Array($xml){ 
    $array = (array)$xml; 

    //recursive Parser 
    foreach ($array as $key => $value){ 
     if(strpos(get_class($value),"SimpleXML")!==false){ 
      $array[$key] = SimpleXML2Array($value); 
     } 
    } 

    return $array; 
} 
+0

मुझे इस फ़ंक्शन के साथ कोई समस्या है क्योंकि प्रत्येक XML बच्चे को सरणी में टाइप करने से आपको समस्या हो सकती है जब टेक्स्ट सीडीएटीए टैग के बीच होता है। –

2

मुझे इस फ़ंक्शन के साथ कोई समस्या है क्योंकि प्रत्येक xml बच्चे को सरणी में टाइप करने से कोई समस्या हो सकती है जब टेक्स्ट सीडीएटीए टैग के बीच होता है।

मैंने यह जांच करके यह तय किया कि किसी सरणी में टाइपकास्टिंग का परिणाम खाली है या नहीं। यदि ऐसा है तो इसे एक स्ट्रिंग पर टाइप करें और आपको उचित परिणाम मिलेगा।

तो यहां मेरा संशोधित संस्करण सीडीएटी समर्थन के साथ है।

function SimpleXML2ArrayWithCDATASupport($xml){ 

    $array = (array)$xml; 

    if (count($array) == 0) { 
     $array = (string)$xml; 
    } 

    if (is_array($array)) { 
     //recursive Parser 
     foreach ($array as $key => $value){ 
      if (is_object($value)) { 
       if(strpos(get_class($value),"SimpleXML")!==false){ 
         $array[$key] = SimpleXML2ArrayWithCDATASupport($value); 
       } 
      } else { 
       $array[$key] = SimpleXML2ArrayWithCDATASupport($value); 
      } 
     } 
    } 

    return $array; 
} 
+1

ऐसा लगता है कि आप फ़ंक्शन में अपनी रिकर्सिव कॉल का नाम बदलना भूल गए हैं क्योंकि फ़ंक्शन SimpleXML2ArrayWithCDATASupport है लेकिन रिकर्सिव कॉल SimpleXML2Array है। – Loren

+0

@ लोरेन धन्यवाद मैंने इसे संपादित किया :) –

+0

मैंने पाया कि 'json_encode' और' http_build_query' सटीक लक्षणों से ग्रस्त हैं, इसलिए यह दृष्टिकोण सबसे विश्वसनीय है। –

28

यह काम करना चाहिए:

$xml = simplexml_load_string($xmlstring); 
$json = json_encode($xml); 
$array = json_decode($json,TRUE); 
+0

मैंने अभी परीक्षण किया और यह काम करता है। यहां तक ​​कि यह भी पुनरावर्ती है, जो महान है। मुझे चिंता है कि गैर-यूटीएफ -8 चरित्र की स्थिति में क्या होगा। गैर-यूटीएफ -8 वर्ण में आने पर 'json_encode' और' json_decode' विधियां चकित होती हैं। 'कोशिश करें ... पकड़' में लपेटना बुद्धिमान होगा, हालांकि मुझे नहीं पता कि कस्टम पार्सर लिखने के बिना इसे ठीक से संभालने का कोई तरीका होगा (यानी यूटीएफ -8 को एन्कोड करें)। प्रतीत होता है कि –

+0

दोनों 'json_encode' और' http_build_query' में ' टैग का अर्थ है। ऐसा लगता है कि दोनों कार्य उन्हें खाली वस्तुओं के रूप में निर्धारित करते हैं, इस मामले में 'http_build_query' इसे पूरी तरह से अनदेखा करता है। –

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