Convert a PHP object to an associative array

后端 未结 30 1535
走了就别回头了
走了就别回头了 2020-11-22 02:18

I\'m integrating an API to my website which works with data stored in objects while my code is written using arrays.

I\'d like a quick-and-dirty function to convert

30条回答
  •  醉话见心
    2020-11-22 02:50

    Here I've made an objectToArray() method, which also works with recursive objects, like when $objectA contains $objectB which points again to $objectA.

    Additionally I've restricted the output to public properties using ReflectionClass. Get rid of it, if you don't need it.

        /**
         * Converts given object to array, recursively.
         * Just outputs public properties.
         *
         * @param object|array $object
         * @return array|string
         */
        protected function objectToArray($object) {
            if (in_array($object, $this->usedObjects, TRUE)) {
                return '**recursive**';
            }
            if (is_array($object) || is_object($object)) {
                if (is_object($object)) {
                    $this->usedObjects[] = $object;
                }
                $result = array();
                $reflectorClass = new \ReflectionClass(get_class($this));
                foreach ($object as $key => $value) {
                    if ($reflectorClass->hasProperty($key) && $reflectorClass->getProperty($key)->isPublic()) {
                        $result[$key] = $this->objectToArray($value);
                    }
                }
                return $result;
            }
            return $object;
        }
    

    To identify already used objects, I am using a protected property in this (abstract) class, named $this->usedObjects. If a recursive nested object is found, it will be replaced by the string **recursive**. Otherwise it would fail in because of infinite loop.

提交回复
热议问题