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

8 ответов


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

$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


быстрый и грязный способ-использовать json_encode и json_decode, который превратит весь массив (включая вложенные элементы) в объект.

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

так же можно использовать для преобразования объекта в массив. Просто добавьте , true to 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);
?>

выходы (обратите внимание, что нет никаких решеток - только stdClasss):

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.

демо


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

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

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

$objectData = (object) $arrayData

для преобразования массива в объект с помощью stdClass просто добавьте (object) для объявления массива u.

EX:

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

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

$obj = (object)$array;

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

$arr = (array)$object

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


другой метод-использовать JSON

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

но это гораздо более интенсивный способ работы с памятью и не поддерживается версиями PHP


массива 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();

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

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

использовать учебник

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