Php 格式化数组的更有效方法

Php 格式化数组的更有效方法,php,arrays,cakephp,Php,Arrays,Cakephp,我从cakePHP模型中获得了大量用于csv导出的数组结果。我一直在使用循环格式化,如下所示。随着记录数量的增加,速度变得太慢,并出现超时错误。有没有更好的方法使用cakephp哈希或php数组函数来实现这一点 foreach($people as $person){ array_push($results, array( 'SchoolName'=> $person['Sc

我从cakePHP模型中获得了大量用于csv导出的数组结果。我一直在使用循环格式化,如下所示。随着记录数量的增加,速度变得太慢,并出现超时错误。有没有更好的方法使用cakephp哈希或php数组函数来实现这一点

foreach($people as $person){    
      array_push($results, array(                               
               'SchoolName'=>   $person['School']['name'],
               'SchoolRef'  =>  $person['School']['ref'],
               'firstName' =>  $person['Person']['firstname'],
               'LastName'  =>   $person['Person']['lastname'],
               'Year1'  =>  $person['Person']['year_1'],
               'StudentID'  =>  $person['Person']['studentid'],
               'Email'     =>   $person['Person']['email']
             ));                                                  
    }           

如果您只是输出到CSV,为什么不尝试直接从MySQL(或您使用的任何数据库)输出呢

例如

或者,如果数据没有改变,您可以预先汇总现有的输出。因此,如果您上次输出CSV时有10000名学生,您可以保存该CSV并添加新记录。如果它们确实发生了变化,您可以将所有字段的哈希值添加到每个记录中

此外,如果数据不必精确到最新的一分钟,您可以每天预先汇总(或任何适合您的时间间隔)


然而,如果没有明确的位置指示(记录大小和超时),也没有明确的想法,就很难做出具体的建议。

为什么你认为这个地方很慢?因为它是php中的循环,而不是在c中使用php函数。“因为它是php中的一个循环,而不是在c中使用php函数”-khm,uhm,ghm…它是php中的一个循环。那又怎样?如果你认为php代码的最大问题是它不是c,那么就用c重写它。或者更好,用ASMNow认真地说:使用分析器或者干脆
microtime(真的)
并测量代码的每一部分。找到最慢的部分,然后进行优化。按照特定的顺序。如果在优化非常慢的代码时遇到一些问题,请提出另一个问题(或更改当前的问题),我认为这会更快“---威尔,说真的,性能优化的经验法则是:优化慢的东西<代码>阵列推送在设计上并不慢。我不明白为什么你不想简单地描述一下你的脚本,然后开始真正的工作。你正在使用的50k真的很小,可能你在其他地方遇到了问题。现在重要的是要认识到你目前的假设是错误的。谢谢。这是建设性的。该报告是管理员用户可以运行的。它在应用程序中,而不是通过phpmysql或其他什么。我喜欢预先概括的想法。我有五万张唱片。所以现在,增加php超时可能是一个更简单的解决方案,但这显然不能很好地扩展。@威尔:“但这显然不能很好地扩展”——当然不能。但出于某种原因,你不是在指出问题,而是在继续猜测。好吧,这取决于你——如果你想成为一名高级猜测者或开发人员,但50k听上去不像是真正的性能issue@Will另外,请确保已打开APC。它可以带来巨大的不同。我知道它的陈词滥调,但有时只是将服务器升级到一个更强大的盒子是一个简单(而且通常很便宜)的解决方案。我认为虫族的评论很有分量。如果您还没有探索过xdebug,我建议您尝试一下。最后,每当我真的遇到性能问题时,我把PHP中的工作卸载到C++中(通常使用RabBMQ把它们连接起来)。这可能超出了你的范围,但我想我应该提一下,因为我们在这里放弃了所有的选择。如果你需要的话,我可以帮你准备。干杯。@Will如果你进入XDebug,我发现KCacheGrind查看器非常有用。或者在窗户上,