【问题标题】:Optimise Counting Items in JSON Array PHP优化 JSON 数组 PHP 中的计数项目
【发布时间】:2014-06-21 11:24:02
【问题描述】:

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

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

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

它根据项目 DefIndex 编号被找到的次数来计算项目。

从 API 返回的 JSON 数组很大,使得页面加载时间非常长。此外,必须为每个项目使用那段代码会使其花费更长的时间。

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

【问题讨论】:

  • 一种更通用的方法是循环所有项目,然后将每个 defindex 的项目计数保存在另一个数组 ($counts[$item['defindex']]++) 中,然后您可以使用 memcached、apc 或 key/value-storage 进行缓存您的选择。
  • 对于我在我的网站上销售的每件商品,都有一个类似上面的代码块。上面的例子是Founding Father项目。有许多不同的项目我需要单独计算。但除了上面的大量代码之外,我没有看到不同的方法。有没有其他办法?

标签: php arrays json performance


【解决方案1】:

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

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

也许可以像提到的hank那样缓存结果数组。

【讨论】:

  • 这个数组看起来怎么样?
  • 这个数组的键将是 defindex 的不同值(不同的项目),值将是具有此 defindex 的项目数(键)。
【解决方案2】:

一种方法是用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 );

【讨论】:

  • 我一定会试试的
【解决方案3】:

简单使用:

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

【讨论】:

  • 不会只计算项目总数吗?我需要给我每件商品的库存数量
  • 你不认为 API 可以为你做点什么吗??
  • API 单独列出每个项目。但是每个项目都有一个唯一的索引号来计算它,但我需要使用上面的代码块来计算每个项目。但是我需要单独计算超过 2oo 种类型的项目
  • 虽然此代码可能有助于回答问题,但仅代码的答案质量不高。更好的答案是解释代码的作用,告诉在哪里插入,解释为什么采用这种方法,并链接到相关文档。
  • @Ashish Steam API 没有计算单个项目类型的功能,此代码块将计算所有项目,而不是特定项目。
猜你喜欢
  • 2013-07-16
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
  • 1970-01-01
  • 2011-09-14
  • 1970-01-01
  • 2013-10-17
相关资源
最近更新 更多