2016-10-05 25 views
-3

我得到了以下阵列:PHP它们重新排列来概括它

["positive"]=> 
    array(3) { 
     [0]=> 
      array(2) { 
       [0]=> 
       int(1473022800000) //unix timestamp 
       [1]=> 
       int(100) 
    } 
     [1]=> 
      array(2) { 
       [0]=> 
       int(1473109200000) 
       [1]=> 
       int(200) 
    } 
     [2]=> 
      array(2) { 
       [0]=> 
       int(1473195600000) 
       [1]=> 
       int(300) 
}// etc... 
["neutral"]=> 
    array(3) { 
     [0]=> 
      array(2) { 
       [0]=> 
       int(1473022800000) //same day as with positive 
       [1]=> 
       int(400) 
     } 
     [1]=> 
      array(2) { 
       [0]=> 
       int(1473109200000)//also second same day as with positive 
       [1]=> 
       int(500) 
} 
     [2]=> 
     array(2) { 
       [0]=> 
       int(1473195600000) 
       [1]=> 
       int(600) 
} // etc... 

我需要重新包装起来,以获得以下内容:

["1473022800000"]=> 
array(2) { 
['positive']=> (int)500 //example values, should be calculated 
['neutral'] => (int)200 
} 
["1473109200000"]=> 
array(2) { 
['positive']=> (int)500 
['neutral'] => (int)200 
} 

所以我需要重新包装起来,从阳性没有了或中立,但从日期来总结这种方式。任何建议如何做到这一点与PHP将是值得欢迎的。谢谢。

UPD这里是我到目前为止已经试过

foreach($myarray as $key=>$val){ //getting the dates 
     //var_dump($key);exit; 
     for($i=0;$i<=30;++$i){ 
      $dates[] = $val[$i][0]; 
     } 
    } 
    $dates = array_unique(array_values($dates)); 
    $dates_upd = []; 
    foreach($dates as $date) { 
     foreach($myarray as $key=>$val){ 
      for($i=0;$i<=30;++$i){ 
       if($val[$i][0]==$date){ 
        $dates_upd['date'] = $date; 
        $dates_upd['date']['total'] = $val[$i][1];//getting errors here (cant use a scalar value etc...) 
       } 
      } 
     } 
    } 
+0

那么,是什么阻止你使用'为'循环? –

+0

我无法正确地总结所有的值。首先,我得到日期数组,然后我试图在foreach循环中获取相对于该日期的值,但它给了我错误的结果。 – Masha

回答

0

您可以用几个嵌套的foreach做循环:

$out=[]; 

foreach($myarray as $key=>$subarray){ 

    foreach($subarray as $item){ 
     $date = $item[0]; 
     $value = $item[1]; 

     $out[$date][$key]=$value; 
    } 

} 
+0

谢谢,按预期工作! – Masha

相关问题