2015-09-19 49 views
-2

我正在寻找脚本中的性能泄漏,也许任何人都知道一些奇怪的东西?foreach的巨大性能问题

其实我有巨大的数组(3mil的数据集。),它看起来像这样(简化):

[2]=> 
    array(11) { 
    ["A"]=> 
    string(10) "10-12-1995" 
    ["B"]=> 
    NULL 
    ["C"]=> 
    NULL 

[3]=> 
    array(11) { 
    ["A"]=> 
    string(10) "31-12-1955" 
    ["B"]=> 
    NULL 
    ["C"]=> 
    string(6) "random" 

我的功能必须检查,如果$起始日期是$ sheetData [$ i] [”一个']。 我还没有发现任何更好的主意,它的成本> 10秒的检查 整个阵列:(

function searchForDate($StartDate, $sheetData) 
     { 
      foreach($sheetData as $key => &$val) 
      { 
       if ($val['A'] === $StartDate) 
       { 
        return true; 
       } 
      } 
      return null; 
     } 
+1

你一个重新做了300万个数据点的线性搜索。您能否安排数据按日期排序(或索引)?如果是这样,您可以改为执行二进制搜索。我不明白为什么在任何现代硬件上,对于任何现代语言来说,这都需要10秒钟,假设数据完全在内存中。这是什么语言? –

+0

你使用什么语言或系统? – jtbandes

回答

0

假设这是PHP,因为那是什么样子,你可以尝试内置功能看它是否提供了更好的性能:

array_search($StartDate, array_column($sheetData, 'A'));

如果没有,那么你最好的选择是做什么@EricJ建议,看看是否可以将数据整理/以某种方式索引进行二进制搜索。