0

PHP で、配列の行と共有列の値を加算する関数を作成したいと考えています。

というわけでインプット。

 $test = array(
    array("c", 5, 6),
    array("c", 2, 3),
    array("test", 5, 6)
 );

そしてアウトプット。

  $testduplicatefree = array(
    array("c", 7, 9),
    array("test", 5, 6)
    )
);

考えている

function combine_duplicates($array,$col){
...
... 
return $duplicatefreearray; 
}

ここで、$col は重複していない配列です。だから、私の場合、

   combine_duplicates($test,0); 

希望の出力が得られます。これについて助けてくれてありがとう。

4

2 に答える 2

1

各配列の最初の値 (この場合は "c") が、2 つの行が重複しているかどうかを判断するために使用するキーであると想定しています。その場合、指定した配列を次のようなインデックス付き配列に置き換えることができます。

array(
    c=>array(5,6)
    test=>array(5,6)
    ...
)

行を 1 つずつ追加し、使用するインデックスが既に存在するかどうかをテストしますif in_array("c", array_keys($my_array))。インデックスが存在しない場合は、そのインデックスで新しい配列を作成します。存在する場合は、代わりに行を反復処理し、その各値を既存の配列の対応する列に追加します。たとえば、キー「c」で 2 行目に到達した場合、最初の値を に追加し$my_array["c"][0]、2 番目の値をに追加し$my_array["c"][1]ます。

于 2012-07-06T21:54:17.077 に答える
0
<?php

function combine_duplicates($array,$col) {
    $index = array();
    foreach ($array as $row) {
        $key = $row[$col];
        if (!isset($index[$key])) {
            $index[$key] = $row;
        } else {
            for ($i = 0; $i < count($row); ++$i) {
                if ($i != $col) {
                    $index[$key][$i] += $row[$i];
                }
            }
        }
    }

    return array_values($index);
}


$array = array(
    array("c", 5, 6),
    array("c", 2, 3),
    array("test", 5, 6)
);

print_r(combine_duplicates($array, 0));

ここで試してみてください: http://codepad.org/MDHEsqhi

于 2012-07-06T21:51:06.630 に答える