映射二维数组中的值,并对这些值执行函数


mapping values in a 2 dimensional array and performing functions on the values

我有一个类似的二维数组

array(
    array(
        'column1' => 10,
        'column2' => 11
    ),
    array(
        'column1' => 25,
        'column2' => 137
    ),
    array(
        'column1' => 21,
        'column2' => 58
    )
)

密钥column1column2是固定的。它们不会改变。

我需要对这个2D阵列中的数据执行各种功能。各种功能可以通过两种方式进行分组:

  • 第一行
  • 列第一

行优先函数的一个例子

我想先按行将所有数字相加,然后再乘以列。

因此,预期行为为(10+11)*(25+137)*(21+58)

列优先函数的示例

我想先按列将所有数字相加,然后再乘以行。

因此,预期行为为(10+25+21)*(11+137+58)

我写自己的组件函数没有问题。在上面,我只需要两个分量函数总和和乘积

function sum (adden1, adden2) {
    return adden1 + adden2;
}
function product (multiplicant1, multiplicant2) {
    return multiplicant1 * multiplicant2;
}

问题在于映射。我想减少我需要编写的for循环的数量。我希望我的代码更加模块化,因为在某些情况下,所需的行为如下:

  1. 对每行100-(column1+column2)/column2执行此操作,然后将所有结果相加

我需要计算的公式太多了。但我很有信心,基本上这都是先行后列的混合。

希望能得到一些关于将值映射到函数的建议。

更新:

最终,我重新设计了我的体系结构,使这个问题消失了。因此,这个问题不再适用于我。

行是最容易映射的:

$a = array(
    array(
        'column1' => 10,
        'column2' => 11
    ),
    array(
        'column1' => 25,
        'column2' => 137
    ),
    array(
        'column1' => 21,
        'column2' => 58
    )
);
echo array_product(array_map('array_sum', $a)), "'n";

列方式需要一个实用函数来将所有列合并为一个数组:

echo array_product(array(
  array_sum(array_column($a, 'column1')),
  array_sum(array_column($a, 'column2'))
)), PHP_EOL;
function array_column(array $a, $column)
{
  return array_map(function($item) use ($column) {
    return $item[$column];
  }, $a);
}

您必须以某种方式对数组进行迭代。看看array_map和array_walk。

这里有一个例子:

<?php
$input = array(
    array(
        'column1' => 10,
        'column2' => 11
    ),
    array(
        'column1' => 25,
        'column2' => 137
    ),
    array(
        'column1' => 21,
        'column2' => 58
    )
);
echo 'Row wise : ', array_product(array_map(
    function($row){ 
     return $row['column1'] + $row['column2']; 
    }, $input)), '<br/>';
$output = array(0,0);
array_walk($input, 
  function($val, $key, &$output){ 
     $output[0] += $val['column1'];
     $output[1] += $val['column2'];
  }, &$output);
echo 'Column wise : ', array_product($output);

?>