Как вычесть значения по дате из массива

У меня есть следующий массив, и мне нужно сделать разницу значений для каждого интервала

Array
(
[0] => Array
(
[Mark] => 0
[ID] => 6236
[Date] => 2015-03-16 12:04:21
[Value] => 2
)
[1] => Array
(
[Mark] => 0
[ID] => 6236
[Date] => 2015-04-16 12:04:21
[Value] => 4
)
[2] => Array
(
[Mark] => 0
[ID] => 6236
[Date] => 2015-05-16 12:04:21
[Value] => 9
)
[3] => Array
(
[Mark] => 0
[ID] => 6236
[Date] => 2015-06-16 12:04:21
[Value] => 15
)
)

и мне нужно сделать разницу для каждого интервала.
что-то вроде

[Date] => 2015-04-16 12:04:21 => [Value][1] - [Value][0] = 2
[Date] => 2015-05-16 12:04:21 => [Value][2] - [Value][1] = 5
[Date] => 2015-06-16 12:04:21 => [Value][3] - [Value][2] = 6

Как я могу это сделать?

0

Решение

Вам нужно перебрать этот массив, чтобы создать новый с этими различиями, например:

function get_differences($array){
$new = array();
foreach($array as $k=>$a){
if(isset($array[$k-1])){
$new[$a['Date']] = $a['Value']-$array[$k-1]['Value'];
}
}
return $new;
}

Чтобы даты были в том же порядке, что и ключи, сначала отсортируйте их по дате, используя usort функция:

function sortdate($a, $b) {
return strtotime($a['Date']) - strtotime($b['Date']);
}
usort($array, 'sortdate');

$new = get_differences($array);
echo "<pre>";
print_r($new);
echo "</pre>";

Выход:

Array
(
[2015-04-16 12:04:21] => 2
[2015-05-16 12:04:21] => 5
[2015-06-16 12:04:21] => 6
)
0

Другие решения

если ваш массив = $ temp

ты можешь сделать это

$temp_2 = array();
$result = array();

foreach($temp as $k => $arr){

if(!count($temp_2)){

$temp_2 = $arr;

continue;

}
$t = array();
$t[Date] = $arr[Date];
$t[Value] = $arr[Value] - $temp_2[Value];
$result[] = $t;
}
0

Created new array and it will give you all intervals.
<?php
$arr = array(
array(
'Mark' => 0,
'ID' => 6236,
'Date' => '2015-03-16 12:04:21',
'Value' => '2'
),
array(
'Mark' => 0,
'ID' => 6236,
'Date' => '2015-04-16 12:04:21',
'Value' => '4'
),
array(
'Mark' => 0,
'ID' => 6236,
'Date' => '2015-05-16 12:04:21',
'Value' => '9'
),
array(
'Mark' => 0,
'ID' => 6236,
'Date' => '2015-06-16 12:04:21',
'Value' => '15'
),

);

echo '<pre>';
print_r($arr);

$newArr = array();
$i=0;
foreach($arr as $eachArr){
foreach($eachArr as $k => $v){
$newArr[$i][$k] = $v;
if($i==0){
$newArr[$i]['interval'] = 0;
}else{
$newArr[$i]['interval'] = $newArr[$i][$k] - $newArr[$i-1][$k];
}
}
$i++;
}

echo '<<br>';
print_r($newArr);
0
По вопросам рекламы [email protected]