ホームページ  >  記事  >  バックエンド開発  >  PHPでオブジェクトを配列に強制する方法

PHPでオブジェクトを配列に強制する方法

藏色散人
藏色散人オリジナル
2021-03-15 09:31:531853ブラウズ

php メソッドでオブジェクトを強制的に配列に変換します: 1. 定義された「object_array」メソッドを介して変換; 2. 「json_decode」メソッドを介して変換; 3. 定義された「object2array_pre」メソッドを介して変換します。

PHPでオブジェクトを配列に強制する方法

#この記事の動作環境: Windows7 システム、PHP7.1 バージョン、DELL G3 コンピューター

php オブジェクトを配列

1.

//PHP stdClass Object转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 の場合、実行には 1 時間がかかります2 番目に、構造はより複雑になり、3 秒に達する可能性があります。パフォーマンスが低すぎるため、次のように置き換えることができます:

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

json_decode(json_encode($array),true)

多層配列の目的オブジェクトの変換は非常に簡単なので、WebService で多層の数値を処理するのに便利です。 グループとオブジェクトの変換 [推奨学習: "

PHP ビデオ チュートリアル "]

単純な (配列) と(オブジェクト) は単層データのみを処理できます。多層配列の場合、オブジェクト変換は何も行いません。

json_decode(json_encode($object) を使用すると、オブジェクトを一度に配列に変換できますが、オブジェクト内に gbk などの utf-8 でエンコードされていない非 ASCII 文字が含まれる場合に問題が発生します。中国語、json_encode はもちろんデコードのパフォーマンスも怪しい

以下のコード:

<?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);
?>

以上がPHPでオブジェクトを配列に強制する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。