PHP a way to find the key after array_sum

119 views Asked by At

I'm working on SMA(simple moving average) function for 5 second ( find the best average of every 5 values for one by one from an array).
I have over 1000 arrays as a result but here we only have 2 for instance.

 0 => array:5 [▼
        1608616431 => 54
        1608616432 => 71
        1608616433 => 79
        1608616434 => 75
        1608616435 => 100
      ]
      1 => array:5 [▼
        1608616432 => 71
        1608616433 => 79
        1608616434 => 75
        1608616435 => 100
        1608616436 => 99
      ]

I'd like to find the maximum of the averages from these arrays and I'm using array_sum then apply max function over them.

for the above arrays we will have avg as follows :

Avgs=[78.8,84.8]

so the maximum would be : 84.8

I need the first key of the array which the maximum comes from it, for this example would be 1608616432

2

There are 2 answers

2
azibom On BEST ANSWER

This script will do exactly what you want

<?php

$array = [
    [
        '1608616431' => 54,
        '1608616432' => 71,
        '1608616433' => 79,
        '1608616434' => 75,
        '1608616435' => 100
    ],
    [
        '1608616432' => 71,
        '1608616433' => 79,
        '1608616434' => 75,
        '1608616435' => 100,
        '1608616436' => 99,
    ],
];

$elementAverage = [];
foreach ($array as $index => $element) {
    $average                                  = array_sum($element)/count($element);
    $elementArrayKeys                         = array_keys($element);
    $elementAverage[reset($elementArrayKeys)] = $average;
}

echo array_search(max($elementAverage), $elementAverage);

output

1608616432

First we make $elementAverage and then get the max average
Then just use the index and get what I want

1
Ferdinand Herrmann On

When doing array_sum(), you could write the result in an indexed array, e.g. with array_key_first().

Then when getting max() you can use array_search() to find the (first) timestamp matching the maximum value.