2015-04-21 83 views
0

值。减去我有以下数组和我需要的值的差为每个间隔如何按日期从阵列

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

你尝试过什么? – Andrew

+1

从1开始循环数组,并从前一个索引中减去该值 –

+0

显示您所做的一些尝试,否则看起来您只希望其他人为您完成工作。 – RiggsFolly

回答

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

以上所有或多或少corect,但为了安全,我需要比较日期 – Goendg

+0

谢谢大家花时间来帮助我:) – Goendg

+0

@Goendg不客气!但是,如果其中任何一个答案对您有用,您可能会将其中一个答案标记为已接受。 –

0

如果你的数组= $临时

你可以做到这一点

$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);