114

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

$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 の初心者です。簡単な例は非常に役に立ちます。同様の質問を検索してみましたが、答えは複雑で、それ以上のものです。基本的なクラスとオブジェクトについての私の理解。

4

8 に答える 8

233

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

$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 に変換されます

于 2013-10-09T12:29:20.537 に答える
66

手っ取り早い方法はjson_encodeandjson_decodeを使用することで、配列全体 (サブ要素を含む) をオブジェクトに変換します。

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

同じことを使用して、オブジェクトを配列に変換できます。に追加, trueするだけjson_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

デモ

于 2013-10-09T12:31:18.953 に答える
23

配列全体を Object 型 (stdClass) に再帰的に変換する場合は、以下が最適な方法であり、特に再帰的 (マルチレベル) 変換を行う場合は、自分の独自の機能。

$array_object = json_decode(json_encode($array));
于 2016-05-13T14:55:05.983 に答える
14

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

$objectData = (object) $arrayData
于 2016-05-24T10:16:18.390 に答える
7

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 のバージョンではサポートされていません。

于 2013-10-12T11:23:20.840 に答える
4

配列から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();
于 2014-12-19T15:27:33.567 に答える