71 lines
1.7 KiB
PHP
71 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace App\Support;
|
|
|
|
class ApiDataTransformer
|
|
{
|
|
/**
|
|
* Convert array keys from snake_case to camelCase recursively
|
|
*/
|
|
public static function snakeToCamel(array $data): array
|
|
{
|
|
$result = [];
|
|
|
|
foreach ($data as $key => $value) {
|
|
$camelKey = lcfirst(str_replace(' ', '', ucwords(str_replace('_', ' ', $key))));
|
|
|
|
if (is_array($value)) {
|
|
$result[$camelKey] = self::snakeToCamel($value);
|
|
} elseif (is_object($value)) {
|
|
$result[$camelKey] = self::snakeToCamel((array)$value);
|
|
} else {
|
|
$result[$camelKey] = $value;
|
|
}
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
/**
|
|
* Convert array keys from camelCase to snake_case recursively
|
|
*/
|
|
public static function camelToSnake(array $data): array
|
|
{
|
|
$result = [];
|
|
|
|
foreach ($data as $key => $value) {
|
|
$snakeKey = strtolower(preg_replace('/(?<!^)[A-Z]/', '_$0', $key));
|
|
|
|
if (is_array($value)) {
|
|
$result[$snakeKey] = self::camelToSnake($value);
|
|
} elseif (is_object($value)) {
|
|
$result[$snakeKey] = self::camelToSnake((array)$value);
|
|
} else {
|
|
$result[$snakeKey] = $value;
|
|
}
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
|
|
protected function parseGermanNumber($value)
|
|
{
|
|
if (is_numeric($value)) {
|
|
return (float)$value;
|
|
}
|
|
|
|
if (!is_string($value)) {
|
|
return 0.0;
|
|
}
|
|
|
|
// Remove all dots (thousands separators)
|
|
$value = str_replace('.', '', $value);
|
|
|
|
// Replace comma with dot for decimal separator
|
|
$value = str_replace(',', '.', $value);
|
|
|
|
return (float)$value;
|
|
}
|
|
}
|