getPropertyKeys(); $snakeCaseProperties = []; foreach ($propertyKeys as $key) { $value = $this->{$key}; if ($value === null) { continue; } if (is_object($value)) { if (method_exists($value, 'jsonSerialize')) { $snakeCaseProperties[StringUtils::camelCaseToSnakeCase($key)] = $value->jsonSerialize(); } } elseif (is_array($value) && !ArrayUtils::isAssoc($value)) { $subArray = []; foreach ($value as $subArrayValue) { if (method_exists($subArrayValue, 'jsonSerialize')) { $subArray[] = $subArrayValue->jsonSerialize(); } else { $subArray[] = $subArrayValue; } } $snakeCaseProperties[StringUtils::camelCaseToSnakeCase($key)] = $subArray; } else { $snakeCaseProperties[StringUtils::camelCaseToSnakeCase($key)] = $value; } } return $snakeCaseProperties; } }