我有两个数组,$posters (945 records)
和$stats_results(6000 records)
。我正在将这两个数组相互比较,以找到从$posters
数组到$stats_results
数组的记录。一切正常,但需要90秒钟或更长时间。我如何才能更快地完成此过程。这是我所做的。
for ($j=0; $j < count($posters); $j++)//945 records
{
for ($i=0; $i < count($stats_results) ; $i++)//6000 records
{
if($stats_results[$i]['path'] == '/'.$posters[$j]['path'])
{
if(date('Ymd',strtotime($stats_results[$i]['start_date']))>=date('Ymd',strtotime($posters[$j]['start_date'])) && date('Ymd',strtotime($stats_results[$i]['start_date']))<=date('Ymd',strtotime($posters[$j]['end_date']) ))
{
$stats[]=array(
//I am storing filtered value in the array
);
}
}
}
正如我所说,一切正常。没有内存问题。有没有更好的方法可以做到这一点?提前致谢。
基于建议的改进代码。它工作正常:
$posters_stats=array();
foreach ($posters as $key => $value)
{
$path = '/'.$value['Identifier'];
$posters_stats[$path]=array(
'sdate'=>date('Ymd',strtotime($value['Presentation_Date'])),
'enddate'=>date('Ymd',strtotime($value['Expiry_Date']))
);
}
foreach ($stats as $key => $stats_result)
{
if(isset($posters_stats[$stats_result["path"]]))
{
if(strtotime($stats_result["date"])>=strtotime($posters_stats[$stats_result["path"]]['sdate']))
{
echo "<pre>";
print_r($stats_result);
}
}else{
echo "<pre>";
print_r($stats_result);
}
}
谢谢大家的贡献:)
我认为您可以按以下形式转换$ posters数组:
$ posters [$ path] = array(“ start_date” =>“ ...”,“ end_date” =>“ ..”);
那么你可以使用
foreach ($stats_results as $key => $stats_result)
{
if(array_key_exist($stats_result["path"] ,$posters))
...
}
会更快
foreach ($stats_results as $key => $stats_result)
{
if(isset($posters[$stats_result["path"]]))
...
}
因此,您只有945发,而不是945 * 6000。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句