web-dev-qa-db-ja.com

stdClass()を使用して配列をオブジェクトに変換する方法

次の配列を作成しました。

$clasa = array(
        'e1' => array('nume' => 'Nitu', 'prenume' => 'Andrei', 'sex' => 'm', 'varsta' => 23),
        'e2' => array('nume' => 'Nae', 'prenume' => 'Ionel', 'sex' => 'm', 'varsta' => 27),
        'e3' => array('nume' => 'Noman', 'prenume' => 'Alice', 'sex' => 'f', 'varsta' => 22),
        'e4' => array('nume' => 'Geangos', 'prenume' => 'Bogdan', 'sex' => 'm', 'varsta' => 23),
        'e5' => array('nume' => 'Vasile', 'prenume' => 'Mihai', 'sex' => 'm', 'varsta' => 25)
);

私はこの配列をstdClass()を使用してオブジェクトに変換する方法を知りたいです、私はPHP初心者です、簡単な例は非常に役立つでしょう、私は同様の質問を探してみましたが、答えは複雑で、基本的なクラスとオブジェクトの理解を超えています。

89
Alexandrw

このコードを追加するだけです

$clasa = (object) array(
            'e1' => array('nume' => 'Nitu', 'prenume' => 'Andrei', 'sex' => 'm', 'varsta' => 23),
            'e2' => array('nume' => 'Nae', 'prenume' => 'Ionel', 'sex' => 'm', 'varsta' => 27),
            'e3' => array('nume' => 'Noman', 'prenume' => 'Alice', 'sex' => 'f', 'varsta' => 22),
            'e4' => array('nume' => 'Geangos', 'prenume' => 'Bogdan', 'sex' => 'm', 'varsta' => 23),
            'e5' => array('nume' => 'Vasile', 'prenume' => 'Mihai', 'sex' => 'm', 'varsta' => 25)
);

このstdClassオブジェクトが見たい場合は、これを呼び出してください

print_r($clasa);

配列をオブジェクトコードに変換する場合は、

$arr = array('a'=>'Apple','b'=>'ball');
$arr = (object) $arr;

StdClassを使用する必要はありません。自動的にstdClassに変換されます

184
Ekramul Hoque

迅速で汚い方法は、 json_encodejson_decode を使用することで、配列全体(サブ要素を含む)をオブジェクトに変換します。

$clasa = json_decode(json_encode($clasa)); //Turn it into an object

同じことがオブジェクトを配列に変換するために使用できます。単に, truejson_decodeに追加して、関連する配列を返します。

$clasa = json_decode(json_encode($clasa), true); //Turn it into an array

別の方法(ダーティにならない)は、単に再帰関数です。

function convertToObject($array) {
    $object = new stdClass();
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            $value = convertToObject($value);
        }
        $object->$key = $value;
    }
    return $object;
}

または完全なコードで:

<?php
    function convertToObject($array) {
        $object = new stdClass();
        foreach ($array as $key => $value) {
            if (is_array($value)) {
                $value = convertToObject($value);
            }
            $object->$key = $value;
        }
        return $object;
    }

    $clasa = array(
            'e1' => array('nume' => 'Nitu', 'prenume' => 'Andrei', 'sex' => 'm', 'varsta' => 23),
            'e2' => array('nume' => 'Nae', 'prenume' => 'Ionel', 'sex' => 'm', 'varsta' => 27),
            'e3' => array('nume' => 'Noman', 'prenume' => 'Alice', 'sex' => 'f', 'varsta' => 22),
            'e4' => array('nume' => 'Geangos', 'prenume' => 'Bogdan', 'sex' => 'm', 'varsta' => 23),
            'e5' => array('nume' => 'Vasile', 'prenume' => 'Mihai', 'sex' => 'm', 'varsta' => 25)
    );

    $obj = convertToObject($clasa);
    print_r($obj);
?>

出力(配列がないことに注意してください-stdClassのみ):

stdClass Object
(
    [e1] => stdClass Object
        (
            [nume] => Nitu
            [prenume] => Andrei
            [sex] => m
            [varsta] => 23
        )

    [e2] => stdClass Object
        (
            [nume] => Nae
            [prenume] => Ionel
            [sex] => m
            [varsta] => 27
        )

    [e3] => stdClass Object
        (
            [nume] => Noman
            [prenume] => Alice
            [sex] => f
            [varsta] => 22
        )

    [e4] => stdClass Object
        (
            [nume] => Geangos
            [prenume] => Bogdan
            [sex] => m
            [varsta] => 23
        )

    [e5] => stdClass Object
        (
            [nume] => Vasile
            [prenume] => Mihai
            [sex] => m
            [varsta] => 25
        )

)

したがって、$obj->e5->numeで参照することになります。

DEMO

52
h2ooooooo

配列全体をオブジェクト型(stdClass)に再帰的に変換する場合は、以下が最適な方法であり、特に、書き込み(独自の機能。

$array_object = json_decode(json_encode($array));
16
darleys

最も簡単な解決策の1つは

$objectData = (object) $arrayData
7
SESN

StdClassを使用して配列をオブジェクトに変換するには、(object)を配列u宣言に追加するだけです。

例:

echo $array['value'];
echo $object->value;

オブジェクトを配列に変換する

$obj = (object)$array;

配列をオブジェクトに変換する

$arr = (array)$object

これらのメソッドを使用すると、配列とオブジェクトを簡単に交換できます。


別の方法は、jsonを使用することです

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

しかし、これはメモリを集中的に使用する方法であり、PHP <= 5.1のバージョンではサポートされていません

5
Vikas_web

stdClassへの配列は、この方法でphpで実行できます。 (stdClassはすでにPHPの一般的な空のクラスです)

$a = stdClass:: __set_state(array());

実際にPHP 5でstdClass :: __ set_state()を呼び出すと、致命的なエラーが発生します。指摘してくれてありがとう@Ozzy

これは、PHP5でstdClassオブジェクトで__set_state()を使用する方法の例です

class stdClassHelper{

    public static function __set_state(array $array){
        $stdClass = new stdClass();
        foreach ($array as $key => $value){
           $stdClass->$key = $value;
        }
        return $stdClass;
    }
}

$newstd = stdClassHelper::__set_state(array());

またはより良い方法。

$a = (object) array();
4
Beaudinn Greve

または、あなたはこのことを使うことができます

$arr = [1,2,3];
$obj = json_decode(json_encode($arr));
print_r($obj);
3
yussan

これを使用してください チュートリアル

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

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


//OUTPUT
    stdClass Object
(
    [foo] => Test data
    [bar] => stdClass Object
        (
            [baaz] => Testing
            [fooz] => stdClass Object
                (
                    [baz] => Testing again
                )

        )

    [foox] => Just test
)

Array
(
    [foo] => Test data
    [bar] => Array
        (
            [baaz] => Testing
            [fooz] => Array
                (
                    [baz] => Testing again
                )

        )

    [foox] => Just test
)

stdClass Object
(
    [foo] => Test data
    [bar] => stdClass Object
        (
            [baaz] => Testing
            [fooz] => stdClass Object
                (
                    [baz] => Testing again
                )

        )

    [foox] => Just test
)
2
Shakti Patel