Как преобразовать массив в объект с помощью 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, простой пример был бы очень полезен, я попытался найти похожие вопросы, но ответы сложны и выходят за рамки моего понимания основных классов и объектов.

Ответ 1

Вы просто добавляете этот код

$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

Ответ 2

Быстрый и грязный способ использует json_encode и json_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.

DEMO

Ответ 3

Если вы хотите рекурсивно преобразовать весь массив в тип объекта (stdClass), то ниже - лучший метод, и он не требует больших затрат времени или памяти, особенно если вы хотите сделать рекурсивное (многоуровневое) преобразование по сравнению для написания вашей собственной функции.

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

Ответ 4

Чтобы преобразовать массив в объект с помощью stdClass, просто добавьте (object) в массив u declare.

Пример:

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

для преобразования объекта в массив

$obj = (object)$array;

для преобразования массива в объект

$arr = (array)$object

с помощью этих методов вы можете легко переключаться между массивом и объектом.


Другим методом является использование json

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

Но это гораздо более интенсивный процесс памяти и не поддерживается версиями PHP <= 5.1

Ответ 5

Массив stdClass может выполняться на php таким образом. (stdClass уже является порождающим классом PHP)

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

На самом деле вызов stdClass:: __ set_state() в PHP 5 приведет к фатальной ошибке. спасибо @Ozzy за указание

Это пример того, как вы можете использовать __set_state() с объектом stdClass в PHP5

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

Ответ 6

Одним из самых простых решений является

$objectData = (object) $arrayData

Ответ 7

или вы можете использовать эту вещь

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

Ответ 8

используйте Учебник

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