Ваш метод выглядит хорошо, но если вы ищете альтернативы, вы можете использовать массив, который отображается из ключей в функции.
$ops = [
"office" => "ucfirst",
"name" => "ucfirst",
"first_name" => "ucfirst",
"last_name" => "ucfirst",
"email" => "strtolower",
"street" => "ucwords",
"city" => "ucwords",
"start" => function($d) { return DateTime::createFromFormat("Y-m-d H:i:s", $d); },
"end" => function($d) { return DateTime::createFromFormat("Y-m-d H:i:s", $d); }
];
if (isset($ops[$key])) {
return $ops[$key]($value);
} else {
return $value;
}