Files

71 lines
1.7 KiB
PHP
Raw Permalink Normal View History

2025-10-20 08:57:51 +02:00
<?php
2025-12-08 13:20:52 +01:00
2025-10-20 08:57:51 +02:00
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) {
2025-12-08 13:20:52 +01:00
$camelKey = lcfirst(str_replace(' ', '', ucwords(str_replace('_', ' ', $key))));
2025-10-20 08:57:51 +02:00
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) {
2025-12-08 13:20:52 +01:00
$snakeKey = strtolower(preg_replace('/(?<!^)[A-Z]/', '_$0', $key));
2025-10-20 08:57:51 +02:00
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;
}
2025-12-08 13:20:52 +01:00
protected function parseGermanNumber($value)
2025-10-20 08:57:51 +02:00
{
2025-12-08 13:20:52 +01:00
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;
2025-10-20 08:57:51 +02:00
}
2025-12-08 13:20:52 +01:00
}