优化JSON数组PHP中的计数项

时间:2014-06-21 11:24:03

标签: php arrays json performance

我有一个网站,允许人们购买特定游戏的项目。我有一个页面显示200多个项目的所有可用库存。该信息来自Steam API。

我使用此代码来计算可用的项目。

$count_foundingFather = 0;
foreach($hatbot1_array['result']['items'] as $item){
    if($item['defindex'] == 30142){
        $count_foundingFather++;
    }
}

计算物品DefIndex编号的找到次数。

从API返回的JSON数组非常庞大,使得页面加载时间花费很长时间。此外,必须为每个项目使用该块代码,这需要更长的时间。

有没有一种方法可以使项目计数更快,或者每次加载页面时都将其分开?

3 个答案:

答案 0 :(得分:0)

您可以在结果数组中保存每个defindex的项目数:

$counts = array();
foreach($hatbot1_array['result']['items'] as $item){
    if(isset($counts[$item['defindex']])) {
        $counts[$item['defindex']] = 1;
    } else {
        ++$counts[$item['defindex']];
    }
}

也许结果数组可以像hank一样缓存。

答案 1 :(得分:0)

一种方法是使用array_filter()过滤数组,然后计算结果数组。

$count_foundingFather = count( 
    array_filter( $hatbot1_array['result']['items'], function( $item ) { 
        return $item['defindex'] == 30142; 
    } 
)); 

这会加速我不知道,做一个基准测试How to benchmark efficiency of PHP script。这是一个简单的基准示例,不使用外部工具:

function get_time() {
    $mtime = explode( ' ', microtime() );
    return $mtime[1] + $mtime[0];
}

function speed( $start ) {
    return ( get_time() - $start );
}


$start = get_time();

// do the work

echo speed( $start );

答案 2 :(得分:-1)

只需使用:

count($hatbot1_array['result']['items']);