Php 如何从数组中按日期减去值
我有以下数组,我需要对每个间隔的值进行差值Php 如何从数组中按日期减去值,php,arrays,intervals,Php,Arrays,Intervals,我有以下数组,我需要对每个间隔的值进行差值 Array ( [0] => Array ( [Mark] => 0 [ID] => 6236 [Date] => 2015-03-16 12:04:21 [Value] => 2 ) [1] => Array ( [Mark]
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
如何才能做到这一点?您需要循环此数组以创建具有这些差异的新数组,例如:
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>";
如果您的数组=$temp
你可以这样做
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);
创建了新数组,它将为您提供所有间隔。
你尝试过什么吗?你从1开始循环数组,然后从前面的索引中减去值显示你做了一些尝试,否则看起来你只是想让别人为你做你的工作。相信我,我已经用各种方式尝试了两周。我已经在这里发布了作为最后手段(我是一个非常固执的人。)我不知道先发什么,所以我想有人会想出一个全新的想法以上这些或多或少都是正确的,但为了安全起见,我还需要比较一下日期,并感谢大家花时间来帮助我:)@Goendg不客气!但是,如果其中任何一个答案对您有用,您可能会将其中一个答案标记为已接受。正如我在标题“如何从数组中按日期减去值”中所述,我需要按日期执行此操作!所以,不,我没有拿到我的answer@Goendg我假设“by date”意味着键是date,看起来我不明白(现在仍然不明白)你真正的意思,我想按你的意愿做-你想在这个数组中添加天数的差异吗?
$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;
}
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);