PHP में सरणी के लिए stdClass ऑब्जेक्ट कन्वर्ट


108

मैं post_id को पोस्टमेट से प्राप्त कर रहा हूं:

$post_id = $wpdb->get_results("SELECT post_id FROM $wpdb->postmeta WHERE (meta_key = 'mfn-post-link1' AND meta_value = '". $from ."')");

जब मैं कोशिश करता print_r($post_id); हूं तो मेरे पास इस तरह से है:

Array
(
    [0] => stdClass Object
        (
            [post_id] => 140
        )

    [1] => stdClass Object
        (
            [post_id] => 141
        )

    [2] => stdClass Object
        (
            [post_id] => 142
        )

)

और मुझे नहीं पता कि इसे कैसे पार करना है, और मुझे इस तरह से कैसे सरणी मिल सकती है

Array
(
    [0]  => 140


    [1] => 141


    [2] => 142

)

किसी भी विचार मैं यह कैसे कर सकते हैं?


जवाबों:


244

सबसे आसान तरीका है JSON- अपनी वस्तु को एनकोड करें और फिर इसे एक ऐरे में वापस डिकोड करें:

$array = json_decode(json_encode($object), true);

या यदि आप चाहें, तो आप ऑब्जेक्ट को मैन्युअल रूप से भी पार कर सकते हैं:

foreach ($object as $value) 
    $array[] = $value->post_id;

1
हम सिर्फ क्यों नहीं कर सकते $array = json_decode($object,true)?
अक्षयगोपाल

3
@akshaynagpal: इसका परिणाम एक त्रुटि के रूप में होगा क्योंकि आप एक फ़ंक्शन को एक ऑब्जेक्ट दे रहे होंगे जो कि JSON स्ट्रिंग को इसके इनपुट के रूप में उम्मीद करता है। जवाब में, मैं ऑब्जेक्ट को एक JSON स्ट्रिंग में परिवर्तित कर रहा हूं, और फिर इसे json_decode () में इनपुट के रूप में फीड कर रहा हूं ताकि यह एक सरणी लौटाए (दूसरा पैरामीटर सही होने के रूप में इंगित करता है कि एक सरणी वापस आनी चाहिए)।
अमल मुरली

6
मुझे पता है कि यह बहुत देर हो चुकी है, लेकिन आप टाइप कास्टिंग का उपयोग क्यों नहीं करते ... (सरणी) $ obj
chhameed

मैंने पाया json_decode(json_encode($object), True)कि फॉर्च लूप की तुलना में एक अलग सरणी वापस आ गई। ओपी द्वारा पूछे गए प्रारूप में फॉरेस्ट लूप सरणी देता है।
user3442612 8:13 बजे

1
@NgSekLong: वास्तव में नहीं, नहीं।
अमल मुरली

60

बहुत आसान है, पहले अपनी वस्तु को एक json ऑब्जेक्ट में बदल दें, इससे आपकी ऑब्जेक्ट की स्ट्रिंग JSON प्रतिनिधि में वापस आ जाएगी।

उस परिणाम को लें और सही के एक अतिरिक्त पैरामीटर के साथ डिकोड करें, जहां यह साहचर्य सरणी में बदल जाएगा

$array = json_decode(json_encode($oObject),true);

समस्या उन मानों के साथ है, जो जौन-सांकेतिक नहीं हैं या मानकीकृत नहीं हैं, अर्थात। खजूर।
Kangur

20

इसे इस्तेमाल करे:

$new_array = objectToArray($yourObject);

function objectToArray($d) 
{
    if (is_object($d)) {
        // Gets the properties of the given object
        // with get_object_vars function
        $d = get_object_vars($d);
    }

    if (is_array($d)) {
        /*
        * Return array converted to object
        * Using __FUNCTION__ (Magic constant)
        * for recursive call
        */
        return array_map(__FUNCTION__, $d);
    } else {
        // Return array
        return $d;
    }
}

1
Stdobject को सरणी में बदलने के लिए सही कार्य
विवेक

16

आप एक std ऑब्जेक्ट को इस तरह सरणी में बदल सकते हैं:

$objectToArray = (array)$object;

1
यह बहुत अच्छा है, लेकिन यह केवल पहले स्तर पर धर्मान्तरित होता है। यदि आपके पास नेस्टिंग है तो आपको इसे सभी नोड्स के लिए करना होगा।
इवान कैरोसाती

7

एक आयामी सरणियों के लिए:

$array = (array)$class; 

बहु-आयामी सरणी के लिए:

function stdToArray($obj){
  $reaged = (array)$obj;
  foreach($reaged as $key => &$field){
    if(is_object($field))$field = stdToArray($field);
  }
  return $reaged;
}

5
एसओ में आपका स्वागत है। क्या आप इस समस्या को हल करने के तरीके के बारे में बताने के लिए अपने उत्तर को थोड़ा विस्तार देंगे?
गंग -

एक आयामी सरणियों के लिए: $ array = (array) $ वर्ग; बहु-आयामी सरणी के लिए: ऊपर से कोड
स्टैक ओवरफ्लो

6
$wpdb->get_results("SELECT ...", ARRAY_A);

ARRAY_A एक "output_type" तर्क है। यह चार पूर्व-परिभाषित स्थिरांक में से एक हो सकता है (OBJECT में चूक):

OBJECT - result will be output as a numerically indexed array of row objects.
OBJECT_K - result will be output as an associative array of row objects, using first columns values as keys (duplicates will be discarded).
ARRAY_A - result will be output as an numerically indexed array of associative arrays, using column names as keys.
ARRAY_N - result will be output as a numerically indexed array of numerically indexed arrays.  

देखें: http://codex.wordpress.org/Class_Reference/wpdb


यह वर्डप्रेस दुनिया में एकमात्र सुझाया गया तरीका है।
रैप्टर

6

किसी STD क्लास ऑब्जेक्ट को array में कनवर्ट करते समय । php के एरे फंक्शन का उपयोग करके ऑब्जेक्ट को अरैस्ट करें ।

निम्नलिखित कोड स्निपेट के साथ प्रयास करें।

/*** cast the object ***/    
foreach($stdArray as $key => $value)
{
    $stdArray[$key] = (array) $value;
}   
/*** show the results ***/  
print_r( $stdArray );

यह बाहरी ऑब्जेक्ट को एक सरणी में बदल देगा, लेकिन यदि कोई गुण भी ऑब्जेक्ट है तो वे परिवर्तित नहीं होंगे।
कोलमैन

ओपी के प्रश्न के अनुसार उसके पास एक स्तर की वस्तु संरचना है। अगले स्तरों के लिए आपको एक और फ़ॉरेस्ट लूप जोड़ना होगा।
NJInamdar


1

Std से ArrayObject का उपयोग करना या अपना खुद का निर्माण करना

(new \ ArrayObject ($ मौजूदा stdClass))

आप नई विधि पर निर्मित विधि का उपयोग कर सकते हैं:

getArrayCopy ()

या नई वस्तु को पास करें

iterator_to_array


यदि $existingStdClassकोई ऐसी संपत्ति है जो अन्य है stdClassतो वह संपत्ति परिणामस्वरूप सरणी में एक stdClass बनी हुई है। यदि आपको ऐसी किसी चीज़ की आवश्यकता है जो पुनरावर्ती रूप से काम करती है, तो ऐसा लगता है कि आपको json तकनीक का उपयोग करने की आवश्यकता है
पैट्रिक

1

मान लेते हैं $ post_id $ आइटम की सरणी है

$post_id = array_map(function($item){

       return $item->{'post_id'};

       },$post_id);

मजबूत पाठ


1

यदि आपके पास एक सरणी और सरणी तत्व है stdClassतो यह समाधान है:

foreach($post_id as $key=>$item){
    $post_id[$key] = (array)$item;
}

अब stdClassनए सरणी तत्व के रूप में सरणी के अंदर एक सरणी के साथ बदल दिया गया है


1

StdClass Object को Array में बदलने के दो सरल तरीके हैं

$array = get_object_vars($obj);

और अन्य है

$array = json_decode(json_encode($obj), true);

या आप केवल फॉरेस्ट लूप का उपयोग करके सरणी बना सकते हैं

$array = array();
foreach($obj as $key){
    $array[] = $key;
}
print_r($array);

0

मेरे पास एक फ़ंक्शन है myOrderId($_GET['ID']);जो बहुआयामी OBJ देता है। एक स्ट्रिंग के रूप में

अन्य 1 लाइनर में से कोई भी मेरे लिए नहीं आया।

यह दोनों काम किया:

$array = (array)json_decode(myOrderId($_GET['ID']), True);

$array = json_decode(json_decode(json_encode(myOrderId($_GET['ID']))), True);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.