溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

php如何將對(duì)象強(qiáng)制轉(zhuǎn)數(shù)組

發(fā)布時(shí)間:2021-03-15 10:03:57 來源:億速云 閱讀:309 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關(guān)php如何將對(duì)象強(qiáng)制轉(zhuǎn)數(shù)組的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

php將對(duì)象強(qiáng)制轉(zhuǎn)數(shù)組的方法:1、通過定義的“object_array”方法轉(zhuǎn)換;2、通過“json_decode”方法轉(zhuǎn)換;3、通過定義的“object2array_pre”方法轉(zhuǎn)換。

php的對(duì)象轉(zhuǎn)數(shù)組

1.

//PHP stdClass Object轉(zhuǎn)array  
function object_array($array) {  
    if(is_object($array)) {  
        $array = (array)$array;  
    } 
    if(is_array($array)) {
        foreach($array as $key=>$value) {  
            $array[$key] = object_array($value);  
        }  
    }  
    return $array;  
}

2.

$array = json_decode(json_encode(simplexml_load_string($xmlString)),TRUE);

3.

function object2array_pre(&$object) {
    if (is_object($object)) {
        $arr = (array)($object);
    } else {
        $arr = &$object;
    }
    if (is_array($arr)) {
        foreach($arr as $varName => $varValue){
            $arr[$varName] = $this->object2array($varValue);
        }
    }
    return $arr;
}

4.如果是10W的數(shù)據(jù)量的話,執(zhí)行要進(jìn)1s,結(jié)構(gòu)再復(fù)雜些,可以達(dá)到3s,性能太差了,可以用以下替換:

function object2array(&$object) {
    $object =  json_decode( json_encode( $object),true);
    return  $object;
}
json_decode(json_encode($array),true)

  多層數(shù)組和對(duì)象轉(zhuǎn)化的用途很簡(jiǎn)單,便于處理WebService中多層數(shù)組和對(duì)象的轉(zhuǎn)化【推薦學(xué)習(xí):《PHP視頻教程》】

  簡(jiǎn)單的(array)和(object)只能處理單層的數(shù)據(jù),對(duì)于多層的數(shù)組和對(duì)象轉(zhuǎn)換則無能為力。

  通過json_decode(json_encode($object)可以將對(duì)象一次性轉(zhuǎn)換為數(shù)組,但是object中遇到非utf-8編碼的非ascii字符則會(huì)出現(xiàn)問題,比如gbk的中文,何況json_encode和decode的性能也值得疑慮。

  下面上代碼:

<?php
 
    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;
        }
    }
 
    function arrayToObject($d) {
        if (is_array($d)) {
            /*
            * Return array converted to object
            * Using __FUNCTION__ (Magic constant)
            * for recursive call
            */
            return (object) array_map(__FUNCTION__, $d);
        }
        else {
            // Return object
            return $d;
        }
    }
 
    // Useage:
    // Create new stdClass Object     
        $init = new stdClass;
    // Add some test data
    $init->foo = "Test data";
    $init->bar = new stdClass;
    $init->bar->baaz = "Testing";
    $init->bar->fooz = new stdClass;
    $init->bar->fooz->baz = "Testing again";
    $init->foox = "Just test";
 
    // Convert array to object and then object back to array
    $array = objectToArray($init);
    $object = arrayToObject($array);
 
    // Print objects and array
    print_r($init);
    echo "\n";
    print_r($array);
    echo "\n";
    print_r($object);
?>

感謝各位的閱讀!關(guān)于“php如何將對(duì)象強(qiáng)制轉(zhuǎn)數(shù)組”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI