$dataset) { $arr = $dataset['data']; self::fillHoles($arr); $new = []; $last = count($arr); foreach ($arr as $key => $value) { if ($key == 1 && $last > 2) { $new[] = round(($arr[0] + $value + $arr[2]) / 3, 1); } elseif ($key > 1 && $key < $last - 1) { $new[] = round(($arr[$key - 1] + $value + $arr[$key + 1]) / 3, 1); } } $data['datasets'][$k]['data'] = $new; } } public static function fillHoles(array &$arr) { if (! $arr[0]) { // get first value in array and copy it to start if start is null $arr[0] = current(array_filter($arr)); } foreach ($arr as $key => $value) { if ($value) { $priv = $value; } else { $arr[$key] = $priv; } } } }