Как разобрать массив в PHP, чтобы заполнить NULL как среднее между двумя ближайшими значениями - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь проанализировать массив в PHP, чтобы заполнить нулевые значения как средние значения между ближайшими двумя значениями перед вставкой в ​​MySQL (5). В настоящее время я пробовал приведенный ниже код, но код перемещает указатель для всего массива при вызове next ($ value ['wind']).

f_data:

(
 [2019-05-06 09:00:00] => Array
  (
  [temp] => 50
  [wind] => 10
  [rain] => 50
  )

 [2019-05-06 10:00:00] => Array
  (
  [temp] => 65
  )
 [2019-05-06 11:00:00] => Array
  (
  [temp] => 70
  [wind] => 8
  [rain] => 30
  )
)

код до сих пор:

foreach ($f_data as $key => $value) {

    $f_weather_date = $key;
    $future_weather = $value['temp'];
    if ($value['wind'] > 0) {
        $f_wind = $value['wind'];
        $f_wind_last = $f_wind;
    } else {

        $f_wind = $f_wind_last;

        $x = 0;
        $f_wind_next = 0;

       for ($x = 0; $f_wind_next = 0; $x++) {
            $f_wind_next = next($value['wind']);
            return $x; 
    } 

    $f_wind = ($f_wind_next + $f_wind_last) / $x;

    }

    if ($value['rain'] > 0) {
        $f_rain = $value['rain'];
        $f_rain_last = $f_rain; 

    } else {

    $f_rain = $f_rain_last;

    }

    $sql = "INSERT INTO `Table` (`Date`, `Temp`, `Wind`, `Rain`) VALUES ('$f_weather_date', $future_weather, $f_wind, $f_rain)";


    mysqli_query($conn, $sql);

}

Ожидаемые результаты вернутся [ветер] => 9 и [дождь] => 40 в 10: 00: 000

1 Ответ

1 голос
/ 06 мая 2019

Сначала извлеките ключи, а затем итерируйте с помощью ключа int.Таким образом, вы можете легко вычислить среднее значение.

Рассмотрим:

$keys = array_keys($f_data);
$arr = array_values($f_data);

foreach($arr as $k => &$v) { 
    if (!isset($v['rain']) { //you can do the same for wind
        $v = ($arr[$k -1]['rain'] + $arr[$k +1]['rain']) /2;
    } 
}

Теперь верните исходные ключи с помощью:

$f_data = array_combine($keys, $arr);

Обратите внимание, что вам нужно позаботиться о кейсев последнем элементе отсутствуют данные, а когда 2 соседних элемента отсутствуют данные

...