目前我想将存储在mysql(dateime)中的日期转换为FR格式,这是我当前的函数:
public static function convert_dates($result){
foreach ($result as $key => $value){
if (count($result) != count($result, COUNT_RECURSIVE)){
foreach ($result[$key] as $key2 => $value2){
if(preg_match('#date#', $key2) && !empty($value2) && $value2!='0000-00-00'){
if (preg_match("#^'d{4}'-'d{2}-'d{2}$#", $value2)) {
$result[$key][$key2] = date("d/m/Y", strtotime($value2));
}elseif (preg_match("#^'d{4}'-'d{2}-'d{2} 'd{2}':'d{2}:'d{2}$#", $value2)) {
$result[$key][$key2] = date("d/m/Y H:i:s", strtotime($value2));
}
}
}
}else{
if(preg_match('#date#', $key) && !empty($value) && $value!='0000-00-00'){
if (preg_match("#^'d{4}'-'d{2}-'d{2}$#", $value)) {
$result[$key] = date("d/m/Y", strtotime($value));
}elseif (preg_match("#^'d{4}'-'d{2}-'d{2} 'd{2}':'d{2}:'d{2}$#", $value)) {
$result[$key] = date("d/m/Y H:i:s", strtotime($value));
}
}
}
}
return $result;
}
当我从查询中获取数组结果时,我调用此函数,它可以是单个项目或多个项目。
实际上它可以工作,但是有什么方法可以改进代码吗?
感谢您的回答。
是的,它肯定可以改进。在几个方面。首先,您已经复制了实际转换日期的代码。逻辑是一样的,你只是试图递归映射。第二个是你不应该用if (count($result) != count($result, COUNT_RECURSIVE))
来检查它是否是一个数组,你应该使用if (is_array($result))
。第三,虽然这似乎不那么重要,但您可能应该将日期存储为DateTime
对象,而不是字符串。但是我们暂时忽略这一点,您可以稍后对其进行改进。因此,代码的改进版本将是
function transformDate($value) {
if (preg_match("#^'d{4}'-'d{2}-'d{2}$#", $value)) {
return date("d/m/Y", strtotime($value));
} elseif (preg_match("#^'d{4}'-'d{2}-'d{2} 'd{2}':'d{2}:'d{2}$#", $value)) {
return date("d/m/Y H:i:s", strtotime($value));
}
return $value;
}
public static function convert_dates($result) {
foreach ($result as $key => $value) {
if (is_array($value)) {
//Have this function call itself reccursively
$result[$key] = self::convert_dates($value);
} else if (preg_match('#date#', $key) && !empty($value) && $value!='0000-00-00') {
$result[$key] = transformDate($value);
}
}
return $result;
}
我建议使用 array_map
函数而不是直接实际修改数组,但它对键的支持看起来没有很好的文档记录。这应该处理多个二维数组,因为它应该向下遍历n
维度