首页 > 解决方案 > 如何在多维数组中划分值?

问题描述

我想将多维数组中的值除以同一数组中但不在同一维度的其他值。我需要几个 for 循环来访问我的值,但由于我的 for 循环,除法执行了太多次。通过计数器,我发现最后一个 for 循环迭代了大约 160 次。

这是我的数组(我只向您展示重要部分,因为它非常大):

  "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', ), 

标签: php

解决方案


推荐阅读