我有这个方法:
private function formatCliendCardData($data) {
$formatedData = array();
$formatedData['first_name'] = trim($data['name']);
$formatedData['last_name'] = trim($data['surname']);
$formatedData['date_of_birth'] = $data['birth_year'] . '-' . sprintf("%02d", $data['birth_month_id']) . '-' . sprintf("%02d", $data['birth_day']); //[yyyy-mm-dd]
$formatedData['sex'] = ($data['sex_id'] == 's1'? 'm' : 'f');
$formatedData['county'] = 'Latvija'; //@TODO get real data
$formatedData['post_index'] = (int) preg_replace( '/[^0-9]/', '', $data['post_index']);
$formatedData['city'] = trim($data['city']);
$formatedData['street'] = trim($data['street']);
$formatedData['house_nr'] = trim($data['house_nr']);
$formatedData['phone'] = trim($data['phone']);
$formatedData['email'] = trim($data['email']);
return $formatedData;
}
我经常遇到这个问题。我有一个大方法,只需重新格式化数据并返回它。它看起来很难看。很少有其他的方法我知道 - 只是做foreach循环,但有exeptions,所以我需要make'ifs'无论如何。在您的意见中重新格式化此类数据的更好方法是什么?
答案 0 :(得分:1)
如果您有高度自定义条件来重新格式化某些数据,我认为您没有任何其他解决方案可以手动应用此条件与一些if / else或其他自定义循环。
如果没有,您有一些统一的条件来重新格式化,您可以聚合它并批量应用于您的数据。换句话说,我认为唯一的其他解决方案是:概括重新格式化操作的条件并将其应用于您的数据。
这是面向对象的方法
答案 1 :(得分:1)
我同意你好,创建一个类来处理setter中的所有格式化和验证。
class Person
{
public function setName($name)
{
$this->name = trim($name);
}
...
}
然后在函数中创建对象:
private function formatCliendCardData($data) {
$person = new Person();
$person->setName($data['name`])
...
答案 2 :(得分:0)
恕我直言在这些情况下,你必须减少和清理你的代码。我经常使用帮助函数来分割数据和格式化规则。
// helper function (OUTSITE YOUR CLASS)
function waterfall($input=NULL,$fns=array()){
$input = array_reduce($fns, function($result, $fn) {
return $fn($result);
}, $input);
return $input;
}
// your formatting rules
$rules = array(
'first_name' => array('trim'),
'last_name' => array('trim'),
'date_of_birth' => array(
'f0' => function($x){
return sprintf("%s-%02d-%02d",
$x['birth_year'],
$x['birth_month_id'],
$x['birth_day']
);
},
'trim'
),
'sex' => array(
'f0' => function($x){
if($x['sex_id'] == 's1'){
return 'm';
}else{
return 'f';
}
}
),
'post_index' => array(
'f0' => function($x){
return (int) preg_replace('/[^0-9]/', NULL, $x);
},
'trim'
),
'city' => array('trim'),
'email' => array('strtolower','trim')
);
// your data
$data = array(
'first_name' => ' Andrea',
'last_name' => 'Ganduglia ',
'date_of_birth' => array(
'birth_year' => '1899',
'birth_month_id' => 5,
'birth_day' => 7
),
'post_index' => 'IT12100',
'city' => 'Rome',
'email' => 'USER@DOMAIN.tld '
);
// put all together
$formatedData = array();
foreach($data as $k => $v){
$formatedData[$k] = waterfall($v,$rules[$k]);
}
// results
print_r($formatedData);
/*
Array
(
[first_name] => Andrea
[last_name] => Ganduglia
[date_of_birth] => 1899-05-07
[post_index] => 12100
[city] => Rome
[email] => user@domain.tld
)
*/