目前我希望将存储在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;
}
我从查询中获取数组结果时调用此函数,它可以是单项或多项。
实际上它有效,但是有什么方法可以改进代码吗?
感谢您的回答。
答案 0 :(得分:1)
是的,它肯定可以改进。有两种方式。首先,您已经复制了实际转换日期的代码。逻辑是一样的,你只是试图递归地映射。第二,你不应该使用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
维度