expressly/php-common

View on GitHub
src/Entity/ArraySerializeable.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace Expressly\Entity;

use Doctrine\Common\Collections\ArrayCollection;

abstract class ArraySerializeable
{
    public function toArray()
    {
        $data = get_object_vars($this);
        $data = array_filter($data, function($item) {
            return !is_null($item) && $item !== '';
        });

        array_walk_recursive($data, function (&$element) {
            if ($element instanceof ArraySerializeable) {
                $element = $element->toArray();
            }
            if ($element instanceof ArrayCollection) {
                $element = $element->toArray();
                array_walk($element, function (&$item) {
                    $item = $item->toArray();
                });
            }
        });

        return $data;
    }
}