【问题标题】:how to add multidimensional array values ​whose values ​are from different arrays如何添加来自不同数组的多维数组值
【发布时间】:2021-09-25 18:46:46
【问题描述】:

我整天都在与这个作斗争,希望另一双眼睛能给我一些见解。我不确定我是否以正确的方式接近这一点。我有两个数组,分别是多维数组和单数组,我想把多维数组的内容相加,其值取自单数组,其中多维数组的内容与数组相同单个数组的键。我正在使用 Laravel 构建一个应用程序。

$multidimensionArray = array:6 [▼
  "A2" => array:3 [▼
    0 => "A1"
    1 => "A2"
    2 => "A3"
  ]
  "A1" => array:4 [▼
    0 => "A1"
    1 => "A6"
    2 => "A5"
    3 => "A2"
  ]
  "A6" => array:1 [▼
    0 => "A3"
  ]
  "A3" => array:2 [▼
    0 => "A3"
    1 => "A2"
  ]
  "A5" => array:1 [▼
    0 => "A4"
  ]
  "A4" => array:2 [▼
    0 => "A4"
    1 => "A3"
  ]
]

$singeArray = array:6 [▼
  "A1" => 675.58333333333
  "A2" => 1786.75
  "A3" => 2897.9166666667
  "A4" => 4009.0833333333
  "A5" => 5120.25
  "A6" => 6231.4166666667
]

如何根据从$singleArray中取值的key将$multidimensionalArray中的值相加,然后除以$multidimensionalArray中key的个数,例如:在multidimensionalArray中的key“A2”中有值A1, A2,A3和singleArray中A1,A2,A3的值分别是675.58333333333, 1786.75, 2897.9166666667,如何相加然后除以3(根据A2中值的个数)。

我希望结果是这样的

$result = array(
"A2" => 1786.75
"A1" => 3453.5
...etc

)

谢谢你:)

【问题讨论】:

    标签: arrays laravel multidimensional-array array-sum


    【解决方案1】:

    这应该适合你:

    $result = [];
    
    array_walk($multidimensionArray, function($value, $key) use(&$result, $singeArray) {
       // get only those items from $singeArray which exist in $value
       // sum and divide by 3
       $result[ $key ]  = array_sum( array_intersect_key( $singeArray, array_flip($value) ) ) / 3;
    });
    
    var_dump( $result );
    

    编辑: 更新了我的答案忘记使用array_flip

    【讨论】:

      【解决方案2】:

      我会使用foreacharray_filter

      由于您想要平均值,因此可以使用 array_sum 完成。

      这应该可以工作

      $results = [];
      foreach ($multidimensionArray as $key => $valueArr) {
          ## filter out all values of interest from $singleArray
          $filteredValues = array_filter($singeArray, function ($value, $identifier) use ($valueArr) {
              return in_array($identifier, $valueArr);
          }, ARRAY_FILTER_USE_BOTH);
          ## Here we get the average
          $results[$key] = array_sum($filteredValues) / count($filteredValues);
      }
      print_r($results);
      

      Working sandbox link

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-02
        • 1970-01-01
        • 1970-01-01
        • 2012-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多