Ripa Saha
Ripa Saha

Reputation: 2540

determine average value from an array column

consider below array:-

Array
(
[0] => Array
    (
        [0] => 99895
        [1] => 35378
        [2] => 0.01

    )

[1] => Array
    (
        [0] => 99895
        [1] => 813
        [2] => -0.97

    )

[2] => Array
    (
        [0] => 99895
        [1] => 771
        [2] => 0.29

    )

[3] => Array
    (
        [0] => 442
        [1] => 833
        [2] => -1.06

    )

[4] => Array
    (
        [0] => 442
        [1] => 485
        [2] => -0.61

    )

[5] => Array
    (
        [0] => 442
        [1] => 367
        [2] => -0.14

    )

[6] => Array
    (
        [0] => 442
        [1] => 478
        [2] => 0.77

    )

[7] => Array
    (
        [0] => 442
        [1] => 947
        [2] => -0.07

    )

[8] => Array
    (
        [0] => 7977
        [1] => 987
        [2] => 0.76

    )

[9] => Array
    (
        [0] => 7977
        [1] => 819
        [2] => 0.37

    )

[10] => Array
    (
        [0] => 7977
        [1] => 819
        [2] => 0.36

    )

[11] => Array
    (
        [0] => 7977
        [1] => 653
        [2] => 1.16

    )

[12] => Array
    (
        [0] => 7977
        [1] => 1653
        [2] => 1.15
    )

)

from the above array how will I determine the below array?

array
(
    99895 => -0.223

    442 => -0.22

    7977 => 0.76
)

Actually I need the average value of column 3 in respect of column 1.

Upvotes: 0

Views: 295

Answers (1)

Barmar
Barmar

Reputation: 780889

First collect all the column 3 elements into an array keyed off column 1:

$arrays = array();
foreach ($input as $vals) {
    $key = $vals[0];
    $val = $vals[2];
    if (isset($arrays[$key])) {
        $arrays[$key][] = $val;
    } else {
        $arrays[$key] = array($val);
    }
}

Now go through all of them, calculating the averages:

foreach ($arrays as &$array) {
    $array = array_sum($array)/count($array);
}

Upvotes: 2

Related Questions