2015-09-07 24 views
-1

正如您所看到的,我有一個名爲dateTime的鍵,其中包含日期。我需要做的是爲每個日期添加所有條目並返回數組。所以我簡單地把每個日期的dateTime與當天的所有條目加在一起。我不知道提前輸入dateTime,因爲我有一個不斷向我的數據庫插入數據的抓取工具。基於數組中的鍵添加條目PHP

你會如何以最有效的方式做到這一點?我想我會不得不做一個foreach循環,並以某種方式檢查鍵值(dateTime)是否從先前的鍵值改變。然後創建一個全新的陣列,我回到

的陣列的一個例子如下:

array (size=130) 


0 => 
    array (size=2) 
     'dateTime' => string '2015-09-01' (length=10) 
     'entries' => string '225' (length=3) 
    1 => 
    array (size=2) 
     'dateTime' => string '2015-09-01' (length=10) 
     'entries' => string '218' (length=3) 
    2 => 
    array (size=2) 
     'dateTime' => string '2015-09-01' (length=10) 
     'entries' => string '217' (length=3) 
    3 => 
    array (size=2) 
     'dateTime' => string '2015-09-01' (length=10) 
     'entries' => string '225' (length=3) 
    4 => 
    array (size=2) 
     'dateTime' => string '2015-09-02' (length=10) 
     'entries' => string '231' (length=3) 
    5 => 
    array (size=2) 
     'dateTime' => string '2015-09-02' (length=10) 
     'entries' => string '220' (length=3) 
    6 => 
    array (size=2) 
     'dateTime' => string '2015-09-03' (length=10) 
     'entries' => string '223' (length=3) 
    7 => 
    array (size=2) 
     'dateTime' => string '2015-09-03' (length=10) 
     'entries' => string '237' (length=3) 
    8 => 
    array (size=2) 
     'dateTime' => string '2015-09-03' (length=10) 
     'entries' => string '220' (length=3) 

所以它返回這樣

array (size=130) 

    0 => 
    array (size=2) 
     'dateTime' => string '2015-09-01' (length=10) 
     'entries' => string '660' (length=3) 
    1 => 
    array (size=2) 
     'dateTime' => string '2015-09-02' (length=10) 
     'entries' => string '451' (length=3) 
    2 => 
    array (size=2) 
     'dateTime' => string '2015-09-03' (length=10) 
     'entries' => string '680' (length=3) 

數組編輯隨着幫助你們之間,我最終做了以下來獲得正確的格式。

function prepareArrayForGraphDates($array){ 
$results = []; 
$finalResult = []; 

foreach ($array as $value) { 
    if (!isset($results[$value['dateTime']])) { 
     $results[$value['dateTime']] = 0; 
    } 
    $results[$value['dateTime']] += $value['entries'];  
} 
$keyNames = array_keys($results); 
for ($x = 0; $x < sizeof($results); $x++) { 
    $finalResult[$x]['dateTime'] = $keyNames[$x]; 
    $finalResult[$x]['entries'] = $results[$keyNames[$x]]; 
} 
return $finalResult; 
} 
+0

而問題是什麼? –

+1

問題是OP想要按日期總結值'entries'。 –

+0

是的。也許我不夠具體。我剛剛編輯帖子 –

回答

1

使用的事實,數組鍵是唯一的......

$results = []; 
foreach ($array as $value) { 
    if (!isset($results[$value['dateTime']])) { 
     $results[$value['dateTime']] = 0; 
    } 
    $results[$value['dateTime']] += $value['entries']; 
} 
+0

非常感謝。正是我需要的。 –

0

您可以使用日期作爲關鍵字的數組,如字典或字典。

$data = [ 
    [ 
    'datetime'=>'2015-09-02', 
    'entries' => 220 
    ] 
    // ... other entries snipped ... 
]; 

$results = []; 
foreach ($data as $date => $entry) 
{ 
     // if the date has already been recorded with an initial value, add to it 
     if (array_key_exists($date, $results) { 
      $results[$date] += $entry 
     } else { 
      // the date is new; add it to the results and set its initial value 
      $results[$date] = $entry; 
     } 

}