我有一个类似的二维数组
array(
array(
'column1' => 10,
'column2' => 11
),
array(
'column1' => 25,
'column2' => 137
),
array(
'column1' => 21,
'column2' => 58
)
)
密钥column1
和column2
是固定的。它们不会改变。
我需要对这个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循环的数量。我希望我的代码更加模块化,因为在某些情况下,所需的行为如下:
- 对每行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);
?>