Как измерить разницу значений индекса в массиве php - PullRequest
1 голос
/ 24 апреля 2020

У меня есть массив, который выглядит следующим образом.

Array (
  [0] => Array ([label] => 2020-04-01 11:44:13, [y] => 100)
  [1] => Array ([label] => 2020-04-01 11:45:49, [y] => 150)
  [2] => Array ([label] => 2020-04-01 13:11:24, [y] => 175)
  [3] => Array ([label] => 2020-04-02 10:19:08, [y] => 200)
  [4] => Array ([label] => 2020-04-02 11:24:38, [y] => 250)
  [5] => Array ([label] => 2020-04-04 12:24:38, [y] => 300)
  [6] => Array ([label] => 2020-04-05 13:49:38, [y] => 400)
  [7] => Array ([label] => 2020-04-05 14:36:38, [y] => 450)
  [8] => Array ([label] => 2020-04-05 14:24:38, [y] => 550)
  [9] => Array ([label] => 2020-04-08 09:20:41, [y] => 600)
  [10] => Array ([label] => 2020-04-08 10:09:38, [y] => 635)
  [11] => Array ([label] => 2020-04-08 11:35:33, [y] => 690)
  [12] => Array ([label] => 2020-04-08 13:24:38, [y] => 725)
  [13] => Array ([label] => 2020-04-08 17:12:35, [y] => 775)
)

Как видите, у меня есть массив 14, и у каждого есть два значения label и y, и я передаю их оба как моя точка данных диаграммы.

Ниже приведен мой код

<?PHP
$dataPointskWh = array();
$dataPointskWhDiff = array();
$model = $dataProvider->getModels();

foreach ($model as $row) {
    // pushing for kwh values
    array_push($dataPointskWh, array(
        "label" => $row['Data_Date_Time'],
        "y" => $row['kWh']
    ));
}
?>

Что я хочу сделать

  1. Я хочу сделать разницу в следующем шаблоне array[1][y] - array[0][y], который дает мне 50, array[2][y] - array[1][y], который дает мне 25 и так далее до конца массива.
  2. С этим я также хочу сделать разницу между датой и временем как array[1][label]-array[2][label], array[2][label]-array[1][label] и т. д.
  3. Затем я хочу сделать это array_push($dataPointskWhDiff, array("label"=>$row['Data_Date_Time'],"y"=>$row['kWh']));
  4. Наконец, я передам его точкам данных в диаграмме dataPoints: <?php echo json_encode($dataPointskWhdIFF, JSON_NUMERIC_CHECK); ?>
foreach ($dataPointskWh as $key => $number) {
    if (isset($dataPointskWh[$key+1])) {
        $dataPointskWhDiff[$number] = $number - $dataPointskWh[$key+1];
    }
}

var_dump($dataPointskWhDiff);
die();

Я получаю ошибку Unsupported operand types при $dataPointskWhDiff[$number] = $number - $dataPointskWh[$key+1];

Как мне этого добиться? Любая помощь будет высоко ценится

1 Ответ

0 голосов
/ 24 апреля 2020

Прежде всего, с этой строкой у вас есть 2 фундаментальные ошибки. $dataPointskWhDiff[$number] = $number - $dataPointskWh[$key+1];

  1. Вы пытаетесь положить sh в массив $dataPointskWhDiff значение в позиции $number, которая фактически является массивом. Согласно PHP документам . 1.1 - Ключ может быть целым числом или строкой. 1.2 - Массивы и объекты нельзя использовать в качестве ключей. Это приведет к предупреждению: Недопустимый тип смещения.

  2. Ваша переменная $number и клавиша $dataPointskWh[$key+1] внутри foreach l oop, очевидно, являются типом array. Вы не можете использовать операнд - с типами массивов, выполнив следующее $number - $dataPointskWh[$key+1]. Вот почему вы поймали Fatal Error: Unsupported operand types in. Здесь вы можете проверить действительные array operators.

Я думаю, что вы в основном пытаетесь достичь следующего:

$dataPointskWhDiff[$key] = $number['y'] - $dataPointskWh[$key+1]['y'];

Это вычтет y значение следующей итерации $dataPointskWh[$key+1]['y'] из текущего $number.

JFYI: Также я бы предложил вам проверить границы и соблюдать осторожность с $dataPointskWh[$key+1], потому что во время итераций вы не знаете, существует ли $key + 1 в $dataPointsKwh.

...