Php 不需要多维数组就可以直接设置CellValue吗?

Php 不需要多维数组就可以直接设置CellValue吗?,php,xml,multidimensional-array,phpexcel,Php,Xml,Multidimensional Array,Phpexcel,我现在开始编写一个已经完成的脚本。它工作得很好,但它需要的时间太长,我相信我知道原因,但我没有成功地改善它 情况如下,脚本读取一个XML文件,其中包含大量关于温度的信息,所有这些信息都在XML中的各种标记中 $l = 3; $q = $CON->Query("SELECT cod_cidade, cidade, ci

我现在开始编写一个已经完成的脚本。它工作得很好,但它需要的时间太长,我相信我知道原因,但我没有成功地改善它

情况如下,脚本读取一个XML文件,其中包含大量关于温度的信息,所有这些信息都在XML中的各种
标记中

$l = 3;

$q = $CON->Query("SELECT 
                            cod_cidade, 
                            cidade, 
                            cidcompleta 
                      FROM 
                            listabrasil 
                      WHERE 
                            cidade LIKE '%Aj%' 
                      ORDER BY 
                            cidade ASC");

    while ($x = $CON->Fetch ($q))
    {
        $XML = simplexml_load_file('http://ws.somarmeteorologia.com.br/previsao.php?Cidade='.$x['cidade'].'&DiasPrevisao=15');
        print $x['cidade']."\n";    
        foreach ($XML->Previsao as $P)
        {   
            $Previsao[$x['cidade']]['data'][] = (string)$P->Data;
            $Previsao[$x['cidade']]['tmin'][] = (float) $P->Tmin;
            $Previsao[$x['cidade']]['tmax'][] = (float) $P->Tmax;
            $Previsao[$x['cidade']]['prec'][] = (float) $P->Prec;
            $Previsao[$x['cidade']]['velvento'][] = (float) $P->VelVento;
            $Previsao[$x['cidade']]['dirvento'][] = (string)$P->DirVento;
        }
    }

    foreach ($Previsao as $Cid => $Dados) 
    {
        $col = 1;
        for($dias = 0; $dias < 15 ; $dias++)
        {
            $PlanilhaBloomberg->setCellValue($colunas[$col+0].'2', $Dados['data'][$dias]);
            $PlanilhaBloomberg->setCellValue($colunas[$col+0].$l, $Dados['tmin'][$dias].'C');
            $PlanilhaBloomberg->setCellValue($colunas[$col+1].$l, $Dados['tmax'][$dias].'C');
            $PlanilhaBloomberg->setCellValue($colunas[$col+2].$l, $Dados['prec'][$dias].'mm');
            $PlanilhaBloomberg->setCellValue($colunas[$col+3].$l, $Dados['velvento'][$dias].'km/h');
            $PlanilhaBloomberg->setCellValue($colunas[$col+4].$l, $Dados['dirvento'][$dias]);

            print $Dados['data'][$dias]."\n";
            print $Dados['tmin'][$dias]."\n";
            print $Dados['tmax'][$dias]."\n";
            print $Dados['prec'][$dias]."\n";
            print $Dados['velcento'][$dias]."\n";
            print $Dados['dirvento'][$dias]."\n";

            $col = $col + 5;
        }
        $l++;
    }
$l=3;
$q=$CON->查询(“选择
鳕鱼,
cidade,
完整的
从…起
利斯塔布拉西勒
哪里
像“%Aj%”这样的代码
订购人
cidade ASC);
而($x=$CON->Fetch($q))
{
$XML=simplexml\u加载\u文件('http://ws.somarmeteorologia.com.br/previsao.php?Cidade=“.$x['cidade'.&DiasPrevisao=15”);
打印$x['cidade']。“\n”;
foreach($XML->Previsao作为$P)
{   
$Previsao[$x['cidade']['data'][]=(字符串)$P->data;
$Previsao[$x['cidade']['tmin'][=(浮动)$P->tmin;
$Previsao[$x['cidade']['tmax'][=(浮动)$P->tmax;
$Previsao[$x['cidade']['prec'][=(浮动)$P->prec;
$Previsao[$x['cidade']['velvento'][=(浮动)$P->velvento;
$Previsao[$x['cidade']['dirvento'][]=(字符串)$P->dirvento;
}
}
foreach($Previsao作为$Cid=>$Dados)
{
$col=1;
对于($dias=0;$dias<15;$dias++)
{
$planilhablomberg->setCellValue($colunas[$col+0].'2',$Dados['data'][$dias]);
$planilhablomberg->setCellValue($colunas[$col+0].$l,$Dados['tmin'][$dias].'C');
$planilhablomberg->setCellValue($colunas[$col+1].$l,$Dados['tmax'][$dias].'C');
$planilhablomberg->setCellValue($colunas[$col+2].$l,$Dados['prec'][$dias].'mm');
$planilhablomberg->setCellValue($colunas[$col+3].$l,$Dados['velvento'][$dias].'km/h');
$planilhablomberg->setCellValue($colunas[$col+4].$l,$Dados['dirvento'][$dias]);
打印$Dados['data'][$dias]。“\n”;
打印$Dados['tmin'][$dias]。“\n”;
打印$Dados['tmax'][$dias]。“\n”;
打印$Dados['prec'][$dias]。“\n”;
打印$Dados['velcento'][$dias]。“\n”;
打印$Dados['dirvento'][$dias]。“\n”;
$col=$col+5;
}
$l++;
}
不要担心setCellValue,它只是来自PHPExcel库。因此,从我所能收集到的数据来看,执行起来需要很长时间,这显然是因为它从XML中收集了大量数据,但也因为它一直填充多维数组$Previsao。。。我希望实现的是直接填充setCellValue,而不需要多维数组,但没有成功。你们认为这有可能吗?如果有,这会减少脚本的执行时间吗


提前感谢大家的帮助,如果这个问题过于集中,也请原谅我,我不确定这是否会导致问题。

PHPExcel设置CellValue通常需要很长时间。它们可能是更好的代码的最佳解决方案,但我不认为在运行时会有太大的不同。在保存文件之前,请尝试设置precalculateformulas(False),以便PHPExcel不会在保存时计算值。这可能会节省一些时间。其次,假设$planilhablomberg是$object->getActiveSheet(),您可以这样调用它

        $PlanilhaBloomberg->setCellValue($colunas[$col+0].'2', $Dados['data'][$dias]);
                          ->setCellValue($colunas[$col+0].$l, $Dados['tmin'][$dias].'C');
                          ->setCellValue($colunas[$col+1].$l, $Dados['tmax'][$dias].'C');
                          ->setCellValue($colunas[$col+2].$l, $Dados['prec'][$dias].'mm');
                          ->setCellValue($colunas[$col+3].$l, $Dados['velvento'][$dias].'km/h');
                          ->setCellValue($colunas[$col+4].$l, $Dados['dirvento'][$dias]);

这可能会有所帮助。

您正在迭代数据库结果,迭代每个数据库结果的xml,以便在内存中构建一个大数组;然后在该数组上迭代以构建Excel工作表。。。。当然,应该可以避免建立大阵列;阵列的内存非常昂贵,而且在为该阵列分配内存时也会花费大量的时间开销

也可以直接从XML循环填充Excel,避免整个数组构建(这节省了内存和内存分配时间),同时也节省了整个循环


这实际上只是一个确定需要从哪个XML值填充哪个单元格的例子;但我无法想象数组结构能解决这个问题

无论如何,请等待面包师。他也许能帮得更好。希望我做到了。