需要帮助优化php迭代吗

需要帮助优化php迭代吗,php,laravel,highcharts,Php,Laravel,Highcharts,为了获得数据,我需要迭代不同的表以获得所需的数据 我有我的需求,给我数组,我必须迭代它们,计算等等 下面是一个示例代码: $CompanyDepartmentandUserWiseDataString = array(); foreach($Arrays1 as $Array1) { foreach($Arrays2 as $Array2) {

为了获得数据,我需要迭代不同的表以获得所需的数据

我有我的需求,给我数组,我必须迭代它们,计算等等

下面是一个示例代码:

$CompanyDepartmentandUserWiseDataString = array();

            foreach($Arrays1 as $Array1)
            {
                foreach($Arrays2 as $Array2)
                {
                    if($Array2->id == $Array1->id)
                    {
                        $SelectedCompanyDepartmentPercentage = calculate y;                        

                            foreach($Arrays3 as $Array3)
                            {
                                if($Array3->id == $Array1->id)
                                {
                                  $CompanyDepartmentandUserWiseDataString[] = list the catagories;  
                                }
                            }                 

                            foreach($Arrays3 as $Array3)
                            {                            
                                if($Array3->id == $Array1->id)
                                {
                                    foreach($Arrays4 as $Array4)
                                    {                                        
                                        if($Array4->id == $Array3->id)
                                        {
                                            $SelectedCompanyDepartmentUserPercentage = calculate data;

                                            foreach($Arrays5 as $Array5)
                                            {
                                                if($Array5->id == $Array4->id)
                                                    $CompanyDepartmentandUserWiseDataString[] = print;
                                                }

                                            }

                                        }

                                    }

                                }

                            }

                    }
                }               

            }

            return $CompanyDepartmentandUserWiseDataString;
上述代码生成以下内容:

data = [{ y: 55.11, color: colors[0]

         }, {
             y: 21.63, color: colors[1], drilldown: {
               name: 'Firefox versions', categories: ['Firefox 3.6', 'Firefox 4.0', 'Firefox 3.5', 'Firefox 3.0', 'Firefox 2.0'], level: 1,
                                         data: [13.52, 5.43, 1.58, 0.83, 0.20], 
                      color: colors[1]
            }
         }, {
            y: 11.94, color: colors[2], drilldown: {
               name: 'Chrome versions', categories: ['Chrome 10.0', 'Chrome 11.0', 'Chrome 8.0', 'Chrome 9.0', 'Chrome 12.0', 'Chrome 6.0', 'Chrome 5.0', 'Chrome 7.0'], 
                                        data: [9.91, 0.50, 0.36, 0.32, 0.22, 0.19, 0.12, 0.12], 
                      color: colors[2]
            }
         }, {
            y: 7.15, color: colors[3], drilldown: {
               name: 'Safari versions', categories: ['Safari 5.0', 'Safari 4.0', 'Safari Win 5.0', 'Safari 4.1', 'Safari/Maxthon', 'Safari 3.1', 'Safari 41'], 
                                        data: [4.55, 1.42, 0.23, 0.21, 0.20, 0.19, 0.14], 
                      color: colors[3]
            }
         }, {
            y: 2.14, color: colors[4], drilldown: {
               name: 'Opera versions', categories: ['Opera 11.x', 'Opera 10.x', 'Opera 9.x'], 
                                       data: [1.65, 0.37, 0.12], 
               color: colors[4]
            }
         }];
如何对此进行优化以提高性能。这个系统非常慢


请帮助

您可以先进行一些预处理,将数组转换为关联数组,其中每个条目都由其id键入:

function keyArray($arr) {
    $result = [];
    foreach($arr as $element) {
        $result[$element->id] = $element;
    }
    return $result;
}

$keyedArrays2 = keyArray($Arrays2);
$keyedArrays3 = keyArray($Arrays3);
$keyedArrays4 = keyArray($Arrays4);
$keyedArrays5 = keyArray($Arrays5);
这样工作就变得容易多了,因为在第一个数组上只有一个循环,并且可以在其他数组中找到匹配的元素,而无需进一步循环:

foreach($Arrays1 as $Array1)
{
    if (isset($keyedArrays2[$Array1->id])) {
        $Array2 = $keyedArrays2[$Array1->id];
        // make calculations that depend on $Array2
    }
    if (isset($keyedArrays3[$Array1->id])) {
        $Array3 = $keyedArrays3[$Array1->id];
        // make calculations that depend on $Array3
    }
    if (isset($keyedArrays4[$Array1->id])) {
        $Array4 = $keyedArrays4[$Array1->id];
        // make calculations that depend on $Array4
    }
    if (isset($keyedArrays5[$Array1->id])) {
        $Array5 = $keyedArrays5[$Array1->id];
        // make calculations that depend on $Array5
    }
}               

您可以首先进行一些预处理,将数组转换为关联数组,其中每个条目都由其id设置关键帧:

function keyArray($arr) {
    $result = [];
    foreach($arr as $element) {
        $result[$element->id] = $element;
    }
    return $result;
}

$keyedArrays2 = keyArray($Arrays2);
$keyedArrays3 = keyArray($Arrays3);
$keyedArrays4 = keyArray($Arrays4);
$keyedArrays5 = keyArray($Arrays5);
这样工作就变得容易多了,因为在第一个数组上只有一个循环,并且可以在其他数组中找到匹配的元素,而无需进一步循环:

foreach($Arrays1 as $Array1)
{
    if (isset($keyedArrays2[$Array1->id])) {
        $Array2 = $keyedArrays2[$Array1->id];
        // make calculations that depend on $Array2
    }
    if (isset($keyedArrays3[$Array1->id])) {
        $Array3 = $keyedArrays3[$Array1->id];
        // make calculations that depend on $Array3
    }
    if (isset($keyedArrays4[$Array1->id])) {
        $Array4 = $keyedArrays4[$Array1->id];
        // make calculations that depend on $Array4
    }
    if (isset($keyedArrays5[$Array1->id])) {
        $Array5 = $keyedArrays5[$Array1->id];
        // make calculations that depend on $Array5
    }
}               

如果id为uniq,则应在if末尾添加一个
中断
。array3有一个重复的循环是的,一个array3在生成字符串数组,另一个在生成INT为什么用两个循环代替array3的一个?你可以用一个,这就足够了。另外,你能告诉我们你想用这个代码做什么吗?提供一个样品也很好。对我来说,这简直是一团糟。另一个问题是,如何获得数据?来自mysql数据库?真的!可以为array3创建一个循环,但我们仍然有其他循环。如果id为uniq,则您应该在if末尾添加一个
break
。array3有一个重复的循环是的,一个array3在生成字符串数组,另一个在生成INT为什么用两个循环代替array3的一个?你可以用一个,这就足够了。另外,你能告诉我们你想用这个代码做什么吗?提供一个样品也很好。对我来说,这简直是一团糟。另一个问题是,如何获得数据?来自mysql数据库?真的!可以为array3创建一个循环,但我们仍然有其他循环。我进行了更新,以处理任何数组中都不存在ID的情况。我得到了未定义的偏移量:54!任何原因我做了一个更新来处理任何数组中都不存在ID的情况。我得到了未定义的偏移量:54!任何理由