2016-06-20 29 views
0

我有一個這樣的數組:如何使用內部數組的特定鍵對多維數組進行分組?

$my_array = array(
    array(
     array('cnt' => 1, 'date' => '2016-06-18', 'name' => 'Phone Calls'), 
     array('cnt' => 1,'date' => '2016-06-18','name' => 'Others Works') 
    ), 
    array(
     array('cnt' => 2 , 'date' => '2016-06-17', 'name' => 'Phone Calls'), 
     array('cnt' => 1, 'date' => '2016-06-17', 'name' => 'Others Works') 
    ) 
); 

,我需要轉換成下面的格式來完成我的特定目的。

$desired_result = array(
    array('name' => 'Phone Calls', 'dateDetail' => array(
     array('cnt' => 1, 'date' => '2016-06-18'), 
     array('cnt' => 2, 'date' => '2016-06-17'), 
    )), 
    array('name' => 'Others Works', 'dateDetail' => array(
     array('cnt' => 1, 'date' => '2016-06-18'), 
     array('cnt' => 1, 'date' => '2016-06-17'),   
    )) 
); 

我需要將我的數組按名稱與所有日期和計數數據在一起。有人可以幫我格式化這個數組嗎?

+0

我需要繪製d3chart,我需要我的數組轉換format.What我想嘗試的http://jsfiddle.net/JYS8n/1/ –

+0

都能跟得上我沒有得到任何error.First陣列數組我現在有什麼需要將數組格式轉換爲我的圖表 –

回答

2

您可以通過彈出每個最低級別數組的名稱並將其用作重組數組的較高級別密鑰來按名稱進行分組。

foreach ($your_array as $day) { 
    foreach ($day as $item) { 
     $name = array_pop($item);     // removes the 'name' key and returns it 
     $converted[$name]['name'] = $name; 
     $converted[$name]['dateDetail'][] = $item; 
    } 
} 

$result = array_values($converted);    // convert from string keys to numeric 

array_pop只發生於工作,因爲name是在項目陣列中的最後一個鍵。如果不是,則需要指定要刪除和使用這樣哪個鍵:

$name = $item['name']; 
unset($item['name']); 

要通過datedateDetail陣列每個name中添加分組,這個想法是一樣的,當按名稱分組。使用date作爲dateDetail中的鍵,並將其添加到cnt鍵以獲取重複的日期值。

foreach ($your_array as $day) { 
    foreach ($day as $item) { 
     $name = array_pop($item); 
     $new[$name]['name'] = $name; 

     // check if the date is already set 
     if (isset($new[$name]['dateDetail'][$item['date']])) { 
      // if so, add the count of the current item 
      $new[$name]['dateDetail'][$item['date']]['cnt'] += $item['cnt']; 
     } else { 
      // if not, set it. 
      $new[$name]['dateDetail'][$item['date']] = $item; 
     } 
    } 
} 

// remove the date string keys 
foreach ($new as &$name) { 
    $name['dateDetail'] = array_values($name['dateDetail']); 
} 
unset($name); // unset the reference 

// remove the name string keys 
$result = array_values($new); 
+0

感謝您的回覆。我有一個關鍵名字的數組。但我需要添加具有相同日期的cnt鍵值。請給我解釋一下我該怎麼做? –

+0

原則與按名稱分組相同。使用日期作爲'dateDetail'內的附加關鍵字,併爲每個具有匹配日期的項目增加它。 –

+0

@MadAdh我用一個例子更新了答案,以顯示我的意思。 –

相關問題