5

私はこのような2次元配列を持っています

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

キーcolumn1とキーcolumn2は固定されています。それらは変わりません。

この 2D 配列のデータに対してさまざまな機能を実行する必要があります。さまざまな機能は、次の 2 つの方法でグループ化できます。

  • 行順優先
  • 列方向優先

行単位の最初の関数の例、

列を掛ける前に、最初にすべての数値を行ごとに合計したいと思います。

したがって、予想される動作は (10+11) * (25+137) * (21+58) です。

列単位の最初の関数の例、

行を掛ける前に、最初にすべての数値を列ごとに合計したいと思います。

したがって、予想される動作は (10+25+21)*(11+137+58) です。

自分のコンポーネント関数を書き出すのに問題はありません。上記では、sum と product の 2 つのコンポーネント関数だけが必要です。

function sum (adden1, adden2) {
    return adden1 + adden2;
}

function product (multiplicant1, multiplicant2) {
    return multiplicant1 * multiplicant2;
}

問題はマッピングです。記述する必要がある for ループの数を減らしたい。必要な動作が次のような場合があるため、コードをよりモジュール化したいと考えています。

  1. 各行 100-(column1+column2) / column2 に対してこれを実行し、すべての結果を合計します。

作業する必要がある数式が多すぎます。しかし、基本的には、最初に行単位または列単位で実行することのすべてが混在していると確信しています。

関数への値のマッピングに関するいくつかの提案を得たいと思っています。

アップデート:

最終的に、この問題を解決するためにアーキテクチャを再設計します。したがって、この質問は私には当てはまりません。

4

2 に答える 2

1

行ごとにマッピングするのが最も簡単です。

$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";

列単位では、すべての列を 1 つの配列にまとめるユーティリティ関数が必要です。

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);
}
于 2013-02-05T06:55:00.647 に答える
1

何らかの方法で配列を反復処理する必要があります。array_maparray_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);


?>
于 2013-02-05T05:54:22.307 に答える