Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP将日期从MySQL格式转换为Excel的最佳性能策略_Php_Performance_Mysql_Zend Framework - Fatal编程技术网

使用PHP将日期从MySQL格式转换为Excel的最佳性能策略

使用PHP将日期从MySQL格式转换为Excel的最佳性能策略,php,performance,mysql,zend-framework,Php,Performance,Mysql,Zend Framework,我对PHP、MySQL(和Zend框架)还是有点陌生。我需要将日期转换为MM/DD/YYYY格式的字符串,以便与另一个系统接口 我有这个功能,我已经确定它是这个特定脚本的主要性能杀手。当结果集相当小(40或50行)时,它运行得很快,不到一秒钟。但是当有更多的记录时,比如4000条,这个函数需要大约4分钟。不太好 对于这种情况,提高性能的最佳策略是什么 public function convertDatesToExcelFormat() { $sql = "Select fil_id,

我对PHP、MySQL(和Zend框架)还是有点陌生。我需要将日期转换为MM/DD/YYYY格式的字符串,以便与另一个系统接口

我有这个功能,我已经确定它是这个特定脚本的主要性能杀手。当结果集相当小(40或50行)时,它运行得很快,不到一秒钟。但是当有更多的记录时,比如4000条,这个函数需要大约4分钟。不太好

对于这种情况,提高性能的最佳策略是什么

public function convertDatesToExcelFormat() {
    $sql = "Select fil_id,
        BIRTH_DATE,
        WILL_DATE,
        LAST_CODICIL_DATE,
        TRUST_DATE,
        POA_DATE
        FROM adds";
    $result = $this->getAdapter()->fetchAll($sql);
    foreach ($result as $rowset => $row) {
        foreach ($row as &$val) {
            if (strpos($val, ':')) {
                $val = preg_replace('/[0-9]+:[0-9]+:[0-9]+/', '' , $val);
                $val = preg_replace('/-/', '/', $val);
                $val = substr($val, -6, 5) . '/' . substr($val, 0, 4);
            }
        }
        $data = array(
                'BIRTH_DATE'        => $row['BIRTH_DATE'],
                'WILL_DATE'         => $row['WILL_DATE'],
                'LAST_CODICIL_DATE' => $row['LAST_CODICIL_DATE'],
                'TRUST_DATE'        => $row['TRUST_DATE'],
                'POA_DATE'          => $row['POA_DATE'],
        );
        $where = $this->getAdapter()->quoteInto('fil_id = ?', $row['fil_id']);
        $this->update($data, $where);
    }
    return $this;
}

php有一个非常有用的函数,名为date_format,其形式为

$newDateVar = date_format('d-M-Y', $inputDateVar);
上面的字符串“d-M-Y”可以以各种格式转换。看看php站点,它提供了可用格式的完整分类

让数据库来做这件事:。这个正则表达式是性能杀手。为什么是第二个循环?没有任何意义。感谢MySQL链接。你确定第二个循环没有意义吗?这可能是Zend框架的一个特点,但这就是我提取值的方式。你将如何重写循环?当你让数据库进行格式化时,你根本不需要这个循环。@Falcon-对,但是如果数据库没有这样做(就像上面代码中的情况),那么嵌套循环是必要的,对吗?@maple_shaft这是一个很好的观点,但是另一台服务器上有另一个脚本(我没有访问权限)具体要求这是一个字符串来进行上传。那边有人认为我们能够上传excel文件而不是CSV会“更容易”,但他们这样做是为了所有字段都需要文本数据类型(字符串)。