StdClass অবজেক্টটিকে PHP এ অ্যারে রূপান্তর করুন


108

আমি পোস্টমেটা থেকে পোস্ট_আইডিকে এইভাবে এনেছি:

$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
@াক্ষায়নাগপাল: এটি একটি ত্রুটির ফলস্বরূপ হবে কারণ আপনি কোনও ফাংশনটিকে এমন কোনও বস্তু দিচ্ছেন যা কোনও জেএসএন স্ট্রিংটিকে তার ইনপুট হিসাবে প্রত্যাশা করে। উত্তরে আমি বস্তুকে একটি জেএসএন স্ট্রিংয়ে রূপান্তর করছি এবং তারপরে এটিকে ইনপুট হিসাবে জেসন_ডেকোডে খাওয়াইচ্ছি () সুতরাং এটি একটি অ্যারে ফেরত দেবে (দ্বিতীয় প্যারামিটার সত্য হিসাবে বোঝায় যে অ্যারেটি ফিরে আসা উচিত)।
অমল মুরালি

6
আমি জানি খুব দেরি হয়েছে, তবে আপনি কেন টাইপ কাস্টিং ব্যবহার করবেন না ... (অ্যারে) $
আপত্তি

json_decode(json_encode($object), True)ফোরচ লুপের তুলনায় আমি আলাদা অ্যারে পেয়েছি । ফরচ লুপ অপারেটিং ফর্ম্যাটটিতে অ্যারে প্রদান করে।
ব্যবহারকারী 3442612

1
@ এনজিসেকলং: আসলেই নয়, না।
অমল মুরালি

60

খুব সহজ, প্রথমে আপনার অবজেক্টটিকে একটি জসন বস্তুতে পরিণত করুন, এটি আপনার বস্তুর একটি স্ট্রিং জেএসএন প্রতিনিধিতে ফিরিয়ে দেবে।

ফলাফলটি নিন এবং সত্যের একটি অতিরিক্ত পরামিতি সহ ডিকোড করুন, যেখানে এটি এসোসিয়েটিভ অ্যারেতে রূপান্তরিত হবে

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

সমস্যাটি এমন মানগুলির সাথে হয় যা জসন-এনকোডেবল নয় বা মানক নয়, অর্থাৎ। তারিখ।
কঙ্গুর

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
স্টেডোবজেক্টটি অ্যারেতে পরিবর্তন করার জন্য নিখুঁত ফাংশন
বিবেক

16

আপনি একটি স্ট্যান্ড অবজেক্টকে এইভাবে অ্যারেতে রূপান্তর করতে পারেন:

$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
তাই আপনাকে স্বাগতম। কীভাবে সমস্যাটি সমাধান হয় তা বোঝানোর জন্য আপনার উত্তরটি কিছুটা প্রসারিত করতে আপত্তি করবেন?
গুং - মনিকা পুনরায়

এক-মাত্রিক অ্যারেগুলির জন্য: $ অ্যারে = (অ্যারে) $ শ্রেণি; বহুমাত্রিক অ্যারেটির জন্য: উপরে থেকে কোড
ওভারফ্লো স্ট্যাক করুন

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

ARRAY_A একটি "আউটপুট_ টাইপ" যুক্তি। এটি চারটি প্রাক-সংজ্ঞায়িত ধ্রুবকের একটি হতে পারে (ওবিজেইসিটির ডিফল্ট):

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_References/wpdb


ওয়ার্ডপ্রেস বিশ্বে এটিই একমাত্র উপায়।
র‌্যাপটার

6

একটি এসটিডি শ্রেণি অবজেক্টকে অ্যারেতে রূপান্তর করার সময় পিএইচপি পিচির অ্যারে ফাংশন ব্যবহার করে বস্তুকে অ্যারেতে কাস্ট করুন ।

নিম্নলিখিত কোড স্নিপেট চেষ্টা করে দেখুন।

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

এটি বাহ্যিক বস্তুটিকে একটি অ্যারেতে রূপান্তরিত করবে, তবে বৈশিষ্ট্যগুলির মধ্যেও যদি কোনও বস্তু হয় তবে সেগুলি রূপান্তরিত হবে না।
কোলেম্যান

ওপির প্রশ্ন অনুসারে তাঁর এক স্তর অবজেক্ট স্ট্রাকচার রয়েছে level পরবর্তী স্তরের জন্য আপনাকে অন্য ফোরচ লুপ যুক্ত করতে হবে।
এনজেআইমনদার


1

স্ট্যান্ড থেকে অ্যারেঅবজেক্ট ব্যবহার করে বা নিজের তৈরি করা

(নতুন \ অ্যারেঅবজেক্ট ($ বিদ্যমান স্টিডক্লাস))

আপনি নতুন শ্রেণিতে বিল্ট ইন পদ্ধতিটি ব্যবহার করতে পারেন:

getArrayCopy ()

অথবা নতুন অবজেক্টটি পাস করুন

iterator_to_array


যদি $existingStdClassকোনও সম্পত্তি থাকে যা অন্যটি হয় stdClassতবে সেই সম্পত্তিটি ফলাফলের অ্যারেতে একটি স্টাড ক্লাস থেকে যায়। আপনার যদি এমন কিছু প্রয়োজন হয় যা পুনরাবৃত্তভাবে কাজ করে তবে মনে হয় আপনার জসন কৌশলগুলি ব্যবহার করা দরকার
প্যাট্রিক

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 অবজেক্টকে একটি অ্যারেতে রূপান্তর করার জন্য দুটি সহজ উপায় রয়েছে

$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']);যা বহুমাত্রিক ওবিজে দেয়। একটি স্ট্রিং হিসাবে ।

অন্য 1 টি লাইনারের কেউই আমার পক্ষে ঘুম থেকে উঠেনি।

এই দু'জনেই কাজ করেছেন:

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

$array = json_decode(json_decode(json_encode(myOrderId($_GET['ID']))), True);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.