php - 如何在多维数组中划分值?
问题描述
我想将多维数组中的值除以同一数组中但不在同一维度的其他值。我需要几个 for 循环来访问我的值,但由于我的 for 循环,除法执行了太多次。通过计数器,我发现最后一个 for 循环迭代了大约 160 次。
- 我试图改变我的多维数组。例如,我更改了存储数据的维度。
- 在发现了我最后一个 for 循环的迭代次数后,我尝试将我的初始数据乘以不应该完成但没有工作的迭代次数。
- 我试图将我的值放在两个不同的数组中以简化我的划分。
这是我的数组(我只向您展示重要部分,因为它非常大):
"Congés" => array:5 [▶]
"Maladie" => array:5 [▶]
"Hors_Availability" => array:5 [▶]
"Jours totaux" => array:5 [▶]
"Jours available" => array:6 [▼
"Digital&Delivery" => 29
"General" => 81
"ERP" => 20
"OVH" => 17
"SAP" => 15
"Pourcentage" => array:6 [▼
"Avant-vente" => array:4 [▼
"Digital&Delivery" => "2"
"General" => 4
"ERP" => "1"
"OVH" => "1"
]
"Formation" => array:4 [▼
"Digital&Delivery" => "3"
"General" => 5
"ERP" => "1"
"OVH" => "1"
]
"Gestion" => array:5 [▼
"Digital&Delivery" => "6"
"General" => 12
"ERP" => "3"
"OVH" => "2"
"SAP" => "1"
]
"Offres" => array:4 [▼
"Digital&Delivery" => "1"
"General" => 4
"ERP" => "1"
"OVH" => "2"
]
"Production" => array:5 [▼
"Digital&Delivery" => "2"
"General" => 17
"ERP" => "2"
"OVH" => "1"
"SAP" => "12"
]
"Travaux Passagers" => array:4 [▼
"Digital&Delivery" => "4"
"General" => 7
"ERP" => "1"
"OVH" => "2"
]
]
]
"Availability" => array:5 [▶]
"Sous Famille" => array:6 [▶]
我想将 [Jours available][Pourcentage][SousFamille][CentreDeProd] 除以 [Jours available][CentreDeProd] 并将结果乘以 100。SousFamille 可以是 Avant-vente、Formation、Gestion、Offres、Production、Travaux Passagers . CentreDeProd 可以是 Digital&Delivery、General、ERP、OVH。
这是我的代码:
foreach($dataKPITab2 as $key => $line) {
foreach($line as $centreDeProd => $valeur) {
if(in_array($key, ['Jours available'])) {
//I acces values located in [Jours available][CentreDeProd]
if($centreDeProd != 'Pourcentage')
{
//I stock it in another array
$valeurCentreDeProd[]=$dataKPITab2['Jours available'][$centreDeProd];
}
if (isset($valeur) && is_array($valeur)) {
//Loop on SousFamille ([Jours available][Pourcentage][SousFamille])
foreach($valeur as $key2 => $value) {
//Loop on Centre DeProd by SousFamille ([Jours available][Pourcentage][SousFamille][CentreDeProd])
foreach($value as $key3 => $value2) {
//Loop on valeurCentreDeProd
foreach($valeurCentreDeProd as $valKey => $valLine) {
//ex : dataKPITab2[Jours available][Pourcentage][Avant-vente]=dataKPITab2[Jours available][Pourcentage][Avant-vente]/$valeurCentreDeProd[$valKey]
$dataKPITab2[$key]['Pourcentage'][$key2][$key3]=$dataKPITab2[$key]['Pourcentage'][$key2][$key3]/$valeurCentreDeProd[$valKey]*100;
}
}
}
}
}
}
}
第一个 SousFamille (Avant-Vente) 的预期结果示例:
"Avant-vente" => array:4 [▼
"Digital&Delivery" => 6.89655172
"General" => 4.9382716
"ERP" => 5
"OVH" => 5.88235294
]
第一个 SousFamille (Avant-Vente) 的实际结果示例:
"Avant-vente" => array:4 [▼
"Digital&Delivery" => 1669.4630172205
"General" => 3338.926034441
"ERP" => 834.73150861026
"OVH" => 834.73150861026
]
编辑:
事实上,我想将 [Jours available] [Pourcentage] 以下的内容除以 [Jours available](Digital&Delivery、General、ERP、OVH)以下的维度,“Pourcentage”除外。
例如,我想将 [Jours available][Pourcentage][Avant-vente][Digital&Delivery] 划分为 [Jours available][Digital&Delivery] (2/29 * 100)
然后 [Jours available][Pourcentage][Avant-vente][General] by [Jours available][General] (4/81 * 100)
然后 [Jours available][Pourcentage][Avant-vente][OVH] by [Jours available][OVH] (1/17 * 100)
然后 [Jours available][Pourcentage][Avant-vente][SAP] by [Jours available][SAP] (1/20 *100)
然后我会做同样的事情,但使用 [Jours available][Pourcentage][Formation][Digital&Delivery] by [Jours available][Digital&Delivery] (3/29 * 100)
我想做同样的事情,直到 [Jours available][Pourcentage][Travaux Passagers][OVH] / [Jours available][OVH] (2/17 * 100)
实际结果(问题出在“Pourcentage”中):
array ( 'Congés' => array ( 'Digital&Delivery' => '19', 'General' => 42, 'ERP' => '10', 'OVH' => '4', 'SAP' => '9', ),
'Maladie' => array ( 'Digital&Delivery' => '6', 'General' => 27, 'ERP' => '8', 'OVH' => '4', 'SAP' => '9', ),
'Hors_Availability' => array ( 'General' => 14, 'Digital&Delivery' => 3, 'ERP' => '3', 'OVH' => 5, 'SAP' => '3', ), 'Jours totaux' => array ( 'Digital&Delivery' => 57, 'General' => 164, 'ERP' => 41, 'OVH' => 30, 'SAP' => 36, ),
'Jours available' => array ( 'Digital&Delivery' => 29, 'General' => 81, 'ERP' => 20, 'OVH' => 17, 'SAP' => 15,
'Pourcentage' => array ( 'Avant-vente' => array ( 'Digital&Delivery' => 1669.4630172205104, 'General' => 3338.926034441021, 'ERP' => 834.7315086102552, 'OVH' => 834.7315086102552, ), 'Formation' => array ( 'Digital&Delivery' => 2504.194525830767, 'General' => 4173.657543051278, 'ERP' => 834.7315086102552, 'OVH' => 834.7315086102552, ), 'Gestion' => array ( 'Digital&Delivery' => 5008.389051661534, 'General' => 10016.778103323068, 'ERP' => 2504.194525830767, 'OVH' => 1669.4630172205104, 'SAP' => 834.7315086102552, ), 'Offres' => array ( 'Digital&Delivery' => 834.7315086102552, 'General' => 3338.926034441021, 'ERP' => 834.7315086102552, 'OVH' => 1669.4630172205104, ), 'Production' => array ( 'Digital&Delivery' => 1669.4630172205104, 'General' => 14190.435646374342, 'ERP' => 1669.4630172205104, 'OVH' => 834.7315086102552, 'SAP' => 10016.778103323068, ), 'Travaux Passagers' => array ( 'Digital&Delivery' => 3338.926034441021, 'General' => 5843.120560271789, 'ERP' => 834.7315086102552, 'OVH' => 1669.4630172205104, ), ), ),
'Availability' => array ( 'Digital&Delivery' => 53.70370370370371, 'General' => 54.0, 'ERP' => 52.63157894736842, 'OVH' => 68.0, 'SAP' => 45.45454545454545, ),
'Sous Famille' => array ( 'Avant-vente' => array ( 'Digital&Delivery' => '2', 'General' => 4, 'ERP' => '1', 'OVH' => '1', ), 'Formation' => array ( 'Digital&Delivery' => '3', 'General' => 5, 'ERP' => '1', 'OVH' => '1', ), 'Gestion' => array ( 'Digital&Delivery' => '6', 'General' => 12, 'ERP' => '3', 'OVH' => '2', 'SAP' => '1', ), 'Offres' => array ( 'Digital&Delivery' => '1', 'General' => 4, 'ERP' => '1', 'OVH' => '2', ), 'Production' => array ( 'Digital&Delivery' => '2', 'General' => 17, 'ERP' => '2', 'OVH' => '1', 'SAP' => '12', ), 'Travaux Passagers' => array ( 'Digital&Delivery' => '4', 'General' => 7, 'ERP' => '1', 'OVH' => '2', ), ), )
预期成绩:
array ( 'Congés' => array ( 'Digital&Delivery' => '19', 'General' => 42, 'ERP' => '10', 'OVH' => '4', 'SAP' => '9', ),
'Maladie' => array ( 'Digital&Delivery' => '6', 'General' => 27, 'ERP' => '8', 'OVH' => '4', 'SAP' => '9', ),
'Hors_Availability' => array ( 'General' => 14, 'Digital&Delivery' => 3, 'ERP' => '3', 'OVH' => 5, 'SAP' => '3', ),
'Jours totaux' => array ( 'Digital&Delivery' => 57, 'General' => 164, 'ERP' => 41, 'OVH' => 30, 'SAP' => 36, ),
'Jours available' => array ( 'Digital&Delivery' => 29, 'General' => 81, 'ERP' => 20, 'OVH' => 17, 'SAP' => 15,
'Pourcentage' => array ( 'Avant-vente' => array ( 'Digital&Delivery' => 6.89655172, 'General' => 4.9382716, 'ERP' => 5, 'OVH' => 5.88235294, ), 'Formation' => array ( 'Digital&Delivery' => 10.3448276, 'General' => 6.17283951, 'ERP' => 5, 'OVH' => 5.88235294, ), 'Gestion' => array ( 'Digital&Delivery' => 20.6896552, 'General' => 14.8148148, 'ERP' => 15, 'OVH' => 11.7647059, 'SAP' => 6.66666667, ), 'Offres' => array ( 'Digital&Delivery' => 3.44827586, 'General' => 4.9382716, 'ERP' => 5, 'OVH' => 11.7647059, ), 'Production' => array ( 'Digital&Delivery' => 6.89655172, 'General' => 20.9876543, 'ERP' => 10, 'OVH' => 5.88235294, 'SAP' => 80, ), 'Travaux Passagers' => array ( 'Digital&Delivery' => 13.7931034, 'General' => 8.64197531, 'ERP' => 5, 'OVH' => 11.764754, ), ), ), 'Availability' => array ( 'Digital&Delivery' => 53.70370370370371, 'General' => 54.0, 'ERP' => 52.63157894736842, 'OVH' => 68.0, 'SAP' => 45.45454545454545, ), 'Sous Famille' => array ( 'Avant-vente' => array ( 'Digital&Delivery' => '2', 'General' => 4, 'ERP' => '1', 'OVH' => '1', ), 'Formation' => array ( 'Digital&Delivery' => '3', 'General' => 5, 'ERP' => '1', 'OVH' => '1', ), 'Gestion' => array ( 'Digital&Delivery' => '6', 'General' => 12, 'ERP' => '3', 'OVH' => '2', 'SAP' => '1', ), 'Offres' => array ( 'Digital&Delivery' => '1', 'General' => 4, 'ERP' => '1', 'OVH' => '2', ), 'Production' => array ( 'Digital&Delivery' => '2', 'General' => 17, 'ERP' => '2', 'OVH' => '1', 'SAP' => '12', ), 'Travaux Passagers' => array ( 'Digital&Delivery' => '4', 'General' => 7, 'ERP' => '1', 'OVH' => '2', ), ), )
'Availability' => array ( 'Digital&Delivery' => 53.70370370370371, 'General' => 54.0, 'ERP' => 52.63157894736842, 'OVH' => 68.0, 'SAP' => 45.45454545454545, ),
'Sous Famille' => array ( 'Avant-vente' => array ( 'Digital&Delivery' => '2', 'General' => 4, 'ERP' => '1', 'OVH' => '1', ), 'Formation' => array ( 'Digital&Delivery' => '3', 'General' => 5, 'ERP' => '1', 'OVH' => '1', ), 'Gestion' => array ( 'Digital&Delivery' => '6', 'General' => 12, 'ERP' => '3', 'OVH' => '2', 'SAP' => '1', ), 'Offres' => array ( 'Digital&Delivery' => '1', 'General' => 4, 'ERP' => '1', 'OVH' => '2', ), 'Production' => array ( 'Digital&Delivery' => '2', 'General' => 17, 'ERP' => '2', 'OVH' => '1', 'SAP' => '12', ),
解决方案
推荐阅读
- c - 谁能向我解释这些字符串的行为?为什么我不能清空它们?
- sql - Postgresql count query
- c# - 为什么需要 NativeArray 从 Unity 的 Job System 中获取返回值?
- c - 循环中的诅咒 addch() 在 7 次循环后失败
- python - 我无法通过冒泡排序中的“NoneType”错误
- javascript - 如何在 Javascript 中的 Map 中添加对象数组
- r - 使用每个预测变量列拟合具有多个响应的模型,将结果单独存储在数据框中
- c# - 使用 ClaimsPrincial 从控制台连接到 SignalR 集线器
- javascript - 通过单击按钮使用 iframe 调整容器大小
- python - python selenium headless 运行方式与非无头版本不同