vartec - 당신의 도움을 주셔서 감사합니다. 당신의 아이디어는 나에게 좋은 출발점을주었습니다. Zend_Db_Table을 확장하여 MySQL에서 열 메타 데이터를 빨아들이는 함수를 추가하고이를 사용하여 기본값을 설정했습니다. 아래에 대략 초안을 게시했습니다. 나는 아직 그것을 단순화하려는 시도를하지 않았으며, 즉시 필요한 필드 유형만을 다루었 다. 바라건대, 다른 사람들이 같은 문제를 겪는 것을 도울 수 있습니다.
public function reformatData($array) {
if (!is_array($array)) {
return false;
}
$cols = $this->info(Zend_Db_Table_Abstract::METADATA);
if (is_array($cols)) {
foreach ($cols as $col) {
if (array_key_exists($col['COLUMN_NAME'], $array)) {
switch ($col['DATA_TYPE']) {
case 'int': case 'tinyint':
if ($array[$col['COLUMN_NAME']] == '') {
$newArray[$col['COLUMN_NAME']] = new Zend_Db_Expr('null');
}
else {
$newArray[$col['COLUMN_NAME']] = $array[$col['COLUMN_NAME']];
}
break;
case 'date':
if ($array[$col['COLUMN_NAME']] == '') {
$newArray[$col['COLUMN_NAME']] = new Zend_Db_Expr('null');
}
elseif(!Zend_Date::isDate($array[$col['COLUMN_NAME']], 'YYYY-MM-dd')) {
$date = new Zend_Date($array[$col['COLUMN_NAME']], null, 'en_GB');
$newArray[$col['COLUMN_NAME']] = $date->toString('YYYY-MM-dd');
}
else {
$newArray[$col['COLUMN_NAME']] = $array[$col['COLUMN_NAME']];
}
break;
case 'datetime':
if ($array[$col['COLUMN_NAME']] == '') {
$newArray[$col['COLUMN_NAME']] = new Zend_Db_Expr('null');
}
elseif(!Zend_Date::isDate($array[$col['COLUMN_NAME']], 'YYYY-MM-dd HH:MM')) {
$date = new Zend_Date($array[$col['COLUMN_NAME']], null, 'en_GB');
$newArray[$col['COLUMN_NAME']] = $date->toString('YYYY-MM-dd HH:MM');
}
else {
$newArray[$col['COLUMN_NAME']] = $array[$col['COLUMN_NAME']];
}
break;
default:
$newArray[$col['COLUMN_NAME']] = $array[$col['COLUMN_NAME']];
break;
}
}
}
return $newArray;
}
else {
return false;
}
}
안녕하세요, 그래, 저는 지금 비슷한 것을하고 있습니다. 그러나, 나는 그것이 필요로하는 약 30 개의 들판을 가지고있다. 나는 그들을 통해 반복하지만, 그것은 매우 효율적이지 않습니다. 그리고 필드를 변경/추가하면 코드를 변경해야합니다. 다른 방법으로 반올림? – fistameeny
array_fill_keys ($ emptyFields, new Zend_Db_Expr ('NULL')) 또는 array_map을 사용하여 빈 필드 표현이 Zend_Db_Expr ('NULL')이면 무엇이든 매핑하십시오. – vartec
다른 옵션은 array_fill_keys ($ allFields, new Zend_Db_Expr ('NULL'))를 사용하여 null $ 데이터 배열을 만든 다음 설정하려는 필드를 설정하고 필드를 설정하지 않은 채 null로 유지하는 것입니다. – vartec