需要帮助优化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!任何理由