2012-11-26 30 views
13

में कनवर्ट करें मैं अमेज़ॅन उत्पाद विज्ञापन एपीआई का उपयोग कर रहा हूं। मान बहुआयामी वस्तुओं के रूप में लौटाए जाते हैं।बहुआयामी वस्तुओं को सरणी

यह इस तरह दिखता है:

object(AmazonProduct_Result)#222 (5) { 
    ["_code":protected]=> 
    int(200) 
    ["_data":protected]=> 
    string(16538) 
array(2) { 
    ["IsValid"]=> 
    string(4) "True" 
    ["Items"]=> 
    array(1) { 
     [0]=> 
     object(AmazonProduct_Item)#19 (1) { 
     ["_values":protected]=> 
     array(11) { 
      ["ASIN"]=> 
      string(10) "B005HNF01O" 
      ["ParentASIN"]=> 
      string(10) "B008RKEIZ8" 
      ["DetailPageURL"]=> 
      string(120) "http://rads.stackoverflow.com/amzn/click/B005HNF01O" 
      ["ItemLinks"]=> 
      array(7) { 
      [0]=> 
      object(AmazonProduct_ItemLink)#18 (1) { 
       ["_values":protected]=> 
       array(2) { 
       ["Description"]=> 
       string(17) "Technical Details" 
       ["URL"]=> 
       string(217) "http://rads.stackoverflow.com/amzn/click/B005HNF01O" 
       } 
      } 
      [1]=> 
      object(AmazonProduct_ItemLink)#17 (1) { 
       ["_values":protected]=> 
       array(2) { 

मेरा मतलब यह भी वस्तुओं के अंदर सरणी है। मैं उन सभी को एक बहुआयामी सरणी में परिवर्तित करना चाहता हूं।

+1

आपको इसे सरणी बनाने की आवश्यकता क्यों है? कई सामान्य सरणी कार्यों (जैसे foreach) वस्तुओं के साथ भी इस्तेमाल किया जा सकता है। – MrGlass

+0

वस्तुओं की जांच कैसे करें या वस्तुओं में नहीं है? मैंने जारीकर्ता का उपयोग करने की कोशिश की है लेकिन यह काम नहीं कर रहा है। – user1091558

+0

इसकी एक वस्तु के बाद, मान हमेशा मौजूद होना चाहिए। आपको यह जांचना चाहिए कि क्या यह सेट कुछ उपयोग करने योग्य है (या सिर्फ शून्य) – MrGlass

उत्तर

11

आप नीचे दिए गए जैसे पुनरावर्ती क्रिया का उपयोग कर सकते हैं:

function objToArray($obj, &$arr){ 

    if(!is_object($obj) && !is_array($obj)){ 
     $arr = $obj; 
     return $arr; 
    } 

    foreach ($obj as $key => $value) 
    { 
     if (!empty($value)) 
     { 
      $arr[$key] = array(); 
      objToArray($value, $arr[$key]); 
     } 
     else 
     { 
      $arr[$key] = $value; 
     } 
    } 
    return $arr; 
} 
+0

आप इसे इस आम अनुरोध के लिए neater – SubRed

+5

एक थोड़ा neater दृष्टिकोण होने के लिए बनाने की जरूरत है हो सकता है: समारोह objectToArray ($ डेटा) { अगर (is_object ($ डेटा)) { $ डेटा = get_object_vars ($ डेटा) ; } यदि (is_array ($ डेटा)) { वापसी array_map (__ Function__, $ डेटा); } अन्य { $ डेटा लौटाएं; } } –

+0

हैलो @ सुबरेड, आपका उत्तर मेरे लिए उपयोगी लगता है! मेरी क्वेरी यह है कि हमें '& $ arr' में क्या पास करना है? – SagarPPanchal

75

मैं जानता हूँ कि इस पुरानी है, लेकिन आप कोड का निम्न भाग की कोशिश कर सकते:

$ सरणी = json_decode (json_encode ($ वस्तु) , सच);

जहां $ वस्तु एपीआई की प्रतिक्रिया है।

+3

सहायक और त्वरित समाधान ... –

+2

आप जानते हैं कि क्या। मैं तुमसे प्यार करता हूँ। – sulmanpucit

+2

मुझे यकीन है कि आपको यह हर समय मिल जाएगा, सुपरहीरो, लेकिन आपने अभी अपना जीवन बचाया है। – FueledPublishing

1
function convertObjectToArray($data) { 
    if (is_object($data)) { 
     $data = get_object_vars($data); 
    } 

    if (is_array($data)) { 
     return array_map(__FUNCTION__, $data); 
    } 

    return $data; 
} 

केविन ओप डेन कैम्प को क्रेडिट।

protected function objToArray($obj) 
{ 
    // Not an object or array 
    if (!is_object($obj) && !is_array($obj)) { 
     return $obj; 
    } 

    // Parse array 
    foreach ($obj as $key => $value) { 
     $arr[$key] = $this->objToArray($value); 
    } 

    // Return parsed array 
    return $arr; 
} 

:

0

बस स्थिति में आप यहां आया था के रूप में मैंने किया था और अपनी स्थिति के लिए सही जवाब नहीं मिला, पिछले जवाब में से एक के इस संशोधित संस्करण क्या मेरे लिए काम समाप्त हो गया है मूल मान एक JSON स्ट्रिंग है। विधि कॉल इस तरह दिखता है:

$array = $this->objToArray(json_decode($json, true)); 
0

मैंने एक ऐसा कार्य लिखा जो नौकरी करता है, और सभी जेसन तारों को सरणी में भी परिवर्तित करता है। यह मेरे लिए बहुत अच्छा काम करता है।

function is_json($string) { 
    // php 5.3 or newer needed; 
    json_decode($string); 
    return (json_last_error() == JSON_ERROR_NONE); 
} 

function objectToArray($objectOrArray) { 
    // if is_json -> decode : 
    if (is_string($objectOrArray) && is_json($objectOrArray)) $objectOrArray = json_decode($objectOrArray); 

    // if object -> convert to array : 
    if (is_object($objectOrArray)) $objectOrArray = (array) $objectOrArray; 

    // if not array -> just return it (probably string or number) : 
    if (!is_array($objectOrArray)) return $objectOrArray; 

    // if empty array -> return [] : 
    if (count($objectOrArray) == 0) return []; 

    // repeat tasks for each item : 
    $output = []; 
    foreach ($objectOrArray as $key => $o_a) { 
     $output[$key] = objectToArray($o_a); 
    } 
    return $output; 
} 
संबंधित मुद्दे