1

私は次のような配列データを持っています:

[
    'A1' => [1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    'A2' => [1, 1, 0, 0, 0, 0, 0, 0, 0, 0],
    'A3' => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
];

列の値を追加して、合計のフラットな配列を生成したいと思います。

私はこのような答えが欲しいです:

[2, 1, 0, 0, 0, 0, 0, 0, 0, 0]

これを行うためのPHPの配列関数はありますか?それ以外の場合、どうすればこれを行うことができますか?

4

4 に答える 4

2

常にカスタムコードがあります:

function array_sum_rows($arr) {
    $out = array();
    foreach ($arr as $row) {
        foreach ($row as $i => $val) {
            $out[$i] = isset($out[$i]) ? $out[$i] + $val : $val;
        }
    }
    return $out;
}
于 2012-11-20T13:56:28.747 に答える
0
$multiArray = ... //your array
$sumArray = array();
$i = 1;

foreach ($multiArray as $key => $array) {
    $sumArray[$i] = array_sum($array);
    $i++;
}

これはアレイで機能します。配列を取得します

http://php.net/manual/en/function.array-sum.php

于 2012-11-20T13:53:01.260 に答える
0

残念ながら、転置で実際のインデックスが失われます。

function array_transpose($arr) {
    return call_user_func_array(
        'array_map',
        array_merge(
            array(NULL),
            $arr
        )
    );
}

$transposedArray = array_transpose($myData);
$result = array_map('array_sum', $transposedArray);
var_dump($result);

ただし、インデックスは次の方法で復元できます。

$result = array_combine(array_keys(end($myData)), $result);
于 2012-11-20T14:00:39.497 に答える
0

入力配列を「転置」し(データを90度回転して列が行になるようにします)、新しい「行」をにフィードしarray_map()て、それぞれがarray_sum()それを呼び出します。

コード:(デモ

$array = [
    'A1' => [1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
    'A2' => [1, 1, 0, 0, 0, 0, 0, 0, 0, 0],
    'A3' => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
];

var_export(array_map('array_sum', array_map(null, ...array_values($array))));

*文字列キーをチョークしないphpバージョンを使用するまでarray_values()は、spread演算子()の前に呼び出す必要があります。...

フラットな出力配列を生成します。[2, 1, 0, 0, 0, 0, 0, 0, 0, 0]

于 2021-03-05T21:26:15.340 に答える