2016-07-15 41 views
1

我試圖根據相同的日期(只保留1組)刪除重複的數組值。多維陣列過濾掉組內重複

還要在「1」鍵(在pid鍵上方)中添加數字並將其與重複分組一起添加。

im的問題是每小時下的「只有」假設在同一個「小時」部分下重複過濾。

這裏的陣列IM開始:

Array(
    [1488] => Array 
     (
      [hours] => Array 
       (
        [0] => Array 
         (
          [0] => 2016/07/11 - 2016/07/17 
          [1] => 37 
          [pid] => 1488 
         ) 

        [1] => Array 
         (
          [0] => 2016/07/04 - 2016/07/10 
          [1] => 51 
          [pid] => 1488 
         ) 

        [2] => Array 
         (
          [0] => 2016/07/04 - 2016/07/10 
          [1] => 44 
          [pid] => 1488 
         ) 

        [3] => Array 
         (
          [0] => 2016/07/04 - 2016/07/10 
          [1] => 22 
          [pid] => 1488 
         ) 

       ) 

     ) 

    [2] => Array 
     (
      [hours] => Array 
       (
        [0] => Array 
         (
          [0] => 2016/07/04 - 2016/07/10 
          [1] => 9.5 
          [pid] => 2 
         ) 

        [1] => Array 
         (
          [0] => 2016/07/04 - 2016/07/10 
          [1] => 8 
          [pid] => 2 
         ) 

        [2] => Array 
         (
          [0] => 2016/07/04 - 2016/07/10 
          [1] => 7 
          [pid] => 2 
         ) 

        [3] => Array 
         (
          [0] => 2016/07/11 - 2016/07/17 
          [1] => 5 
          [pid] => 2 
         ) 

       ) 

     ) 

) 

這裏我需要它看起來像:

Array(
    [0] => Array 
     (
      [hours] => Array 
       (
        [0] => Array 
         (
          [0] => 2016/07/11 - 2016/07/17 
          [1] => 37 
          [pid] => 1488 
         ) 

        [1] => Array 
         (
          [0] => 2016/07/04 - 2016/07/10 
          [1] => 117 
          [pid] => 1488 
         ) 

       ) 

     ) 

    [1] => Array 
     (
      [hours] => Array 
       (
        [0] => Array 
         (
          [0] => 2016/07/04 - 2016/07/10 
          [1] => 24.5 
          [pid] => 2 
         ) 

        [1] => Array 
         (
          [0] => 2016/07/11 - 2016/07/17 
          [1] => 5 
          [pid] => 2 
         ) 

       ) 

     ) 

) 

這是我的代碼:

$temp_array = array(); 
    $w = 0; 
    $key_array = array(); 

    $new_array = array(); 

    foreach($project_hours as $old_arrs) { 


      foreach ($old_arrs["hours"] as $val) { 
       if (!in_array($val[0], $key_array)) { 
        $key_array[$w] = $val[0]; 
        $temp_array[$w] = $val; 

       } else { 
        $ser = array_search($val[0], $key_array); 
        $temp_array[$ser][1] += $val[1]; 
       } 

       $w++; 

       $old_arrs["hours"] = $temp_array; 

      } 


     $new_array[] = $old_arrs; 
    } 

    echo '<pre>'; 
    print_r($new_array); 
    echo '</pre>'; 
+2

當建立這個數組,你也可以使用'[0]'值作爲指標,如果'isset',只需添加'[1 ]'在一起。 –

回答

1

你可以這樣做一些簡單的技巧來組織陣列鍵,然後在兩個區域使用array_values()將關聯鍵重置爲n umeric鍵:

// Your array 
$data = array(
    1488 => array(
     'hours' => array(
      0 => array(
       0 => '2016/07/11 - 2016/07/17', 
       1 => 37, 
       'pid' => 1488, 
      ), 
      1 => array(
       0 => '2016/07/04 - 2016/07/10', 
       1 => 51, 
       'pid' => 1488 
      ), 
      2 => array(
       0 => '2016/07/04 - 2016/07/10', 
       1 => 44, 
       'pid' => 1488 
      ), 
      3 => array(
       0 => '2016/07/04 - 2016/07/10', 
       1 => 22, 
       'pid' => 1488 
      ) 
     ) 
    ), 
    2 => array(
     'hours' => array(
      0 => array(
       0 => '2016/07/04 - 2016/07/10', 
       1 => 9.5, 
       'pid' => 2 
      ), 
      1 => array(
       0 => '2016/07/04 - 2016/07/10', 
       1 => 8, 
       'pid' => 2 
      ), 
      2 => array(
       0 => '2016/07/04 - 2016/07/10', 
       1 => 7, 
       'pid' => 2 
      ), 
      3 => array(
       0 => '2016/07/11 - 2016/07/17', 
       1 => 5, 
       'pid' => 2 
      ) 
     ) 
    ) 
); 

// Loop through array... 
foreach($data as $pid => $group) { 
    foreach($group['hours'] as $row) { 
     // I am using the date as a unique key so it's easy to organize 
     $new[$pid]['hours'][$row[0]][0] = $row[0]; 
     // This will draw an warning if you don't first check that it's set 
     if(!isset($new[$pid]['hours'][$row[0]][1])) 
      $new[$pid]['hours'][$row[0]][1] = 0; 
     // Add values together as you go 
     $new[$pid]['hours'][$row[0]][1]  += $row[1]; 
     // On each loop this just assigns the pid (it just keeps overwriting itself 
     // but that is no big deal) 
     $new[$pid]['hours'][$row[0]]['pid'] = $pid; 
    } 
    // Here since you are not using date keys, just reset to numeric 
    $new[$pid]['hours'] = array_values($new[$pid]['hours']); 
} 

print_r(array_values($new)); 

爲您提供:

Array 
(
    [0] => Array 
     (
      [hours] => Array 
       (
        [0] => Array 
         (
          [0] => 2016/07/11 - 2016/07/17 
          [1] => 37 
          [pid] => 1488 
         ) 

        [1] => Array 
         (
          [0] => 2016/07/04 - 2016/07/10 
          [1] => 117 
          [pid] => 1488 
         ) 

       ) 

     ) 

    [1] => Array 
     (
      [hours] => Array 
       (
        [0] => Array 
         (
          [0] => 2016/07/04 - 2016/07/10 
          [1] => 24.5 
          [pid] => 2 
         ) 

        [1] => Array 
         (
          [0] => 2016/07/11 - 2016/07/17 
          [1] => 5 
          [pid] => 2 
         ) 

       ) 

     ) 

) 
+0

你是一個拯救生命的人。 –

+0

其實我只是閱讀@JonathanKuhn評論。他基本上提出了我剛做的事情,所以他首先想到了這個想法! – Rasclatt