我有一些有趣的问题,有几种不同的解决方法。我正在为一个小工具创建一个报告页面,该工具从命令行运行的命令输出,并将聚合信息拆分为更易于阅读的表。
我的代码首先运行cmd并过滤掉一些输入。我在windows中运行它,所以它使用find而不是grep。
以下是我可能从命令中返回的几行示例,每一行都作为数组中的元素返回:
Client client1 2011/06/16 root /appl/now 'area1: info'
Client client2 2011/06/16 root /appl/now 'area2: adds'
Client client3 2011/06/16 root /appl/now 'area3: text'
Client client4 2011/06/16 root /appl/now 'area4: text'
Client client5 2011/06/16 root /appl/now 'area3: text'
Client client6 2011/06/16 root /appl/now 'area3: adds'
Client client7 2011/06/16 root /appl/now 'area1: info'
我需要做的是从上面的输出中取出每一行,并根据area<#>
条目对它们进行分组。那里的每个唯一字符串(info
,adds
等)都是一个表,每个具有该值的条目都有另一个cmd运行,并且输出存储在表中。所以对于上面的输出我会有4个表; area1
将有2个条目,area2
将有1个条目,area3
将有3个条目,area4
将有1个条目。
这些值存储在数据库中,因此我可以执行select语句来获取它们,然后将它们与原始数组进行比较,或者循环遍历数组并将每个唯一值存储在另一个数组中。当我有一个非常大的数据集时,第一个选项似乎更快,而当我有一个小数据集时,第二个选项似乎更快。哪种方式更快?有没有更好的方式我没有想到?
现在,要将所有值的数组与唯一值数组进行比较,以便将它们分组到单独的表中,最快的方法是什么?我正在循环,如果值与唯一值匹配,我将该元素添加到表中。这是通过嵌套的foreach循环完成的,这不是很有效。有什么建议吗?
答案 0 :(得分:1)
您应该创建一个组数组,并且只对您的数据集进行一次迭代,而不是嵌套循环设计。它看起来像是:
<?php
foreach($dataset as $row):
$groups[$row['area_key']][] = $row;
endforeach;
?>
然后,您将从$groups
数组创建表。