dongmuyan5638 2013-06-17 02:16
浏览 16
已采纳

在PHP中计算和构造唯一数组的更好方法

I have the following code which takes rediculously long time to execute. Sometimes it even times out.

foreach ($totalownerships as $totalownership) {
    if (!in_array($totalownership['titleno'], $totaltitles)) {
        $result['totalowns'] += 1;
        $totaltitles[] = $totalownership['titleno'];
        $result['ownershipid'] = $result['ownershipid'] . " " .$totalownership['titleno'];
    }
}

The $totalownerships array size is 52225. Is there a better way of writing this code so that it doesn'e take long time to execute ?

  • 写回答

2条回答 默认 最新

  • dsstlsqt696435 2013-06-17 02:24
    关注

    This will be a lot faster, using PHP's speedy built-in array manipulation tools to eliminate array searches in a loop:

    // Add all titles to $totaltitles, for added speed
    foreach ($totalownerships as $totalownership) {
        $totaltitles[] = $totalownership['titleno'];
    }
    
    // For PHP 5.5+ you can use array_column() to get just the titleno field
    //$totaltitles = array_column($totalownership, 'titleno');
    
    // Use array_unique() to eliminate duplicate titles from $totaltitles
    array_unique($totaltitles);
    
    // Use count() to get a total count of $totaltitles
    $result['totalowns'] = count($totaltitles);
    
    // Use implode() for concatenation of title names
    $result['ownershipid'] .= " " . implode(" ", $totaltitles);
    

    For more PHP performance tips, check: PHP Bench

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 求解vmware的网络模式问题
  • ¥24 EFS加密后,在同一台电脑解密出错,证书界面找不到对应指纹的证书,未备份证书,求在原电脑解密的方法,可行即采纳
  • ¥15 springboot 3.0 实现Security 6.x版本集成
  • ¥15 PHP-8.1 镜像无法用dockerfile里的CMD命令启动 只能进入容器启动,如何解决?(操作系统-ubuntu)
  • ¥30 请帮我解决一下下面六个代码
  • ¥15 关于资源监视工具的e-care有知道的嘛
  • ¥35 MIMO天线稀疏阵列排布问题
  • ¥60 用visual studio编写程序,利用间接平差求解水准网
  • ¥15 Llama如何调用shell或者Python
  • ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?