2015-04-22 80 views
-1

我有以下數組,在這個數組中有相同的日期爲鍵112. 我需要添加那些日期相同的數組。在PHP中添加匹配數組鍵值params

Array 
(
[0] => Array 
    (
     [112] => 2015-02-17 
     [97] => 20.00 
     [84] => 13.00 
    ) 

[1] => Array 
    (
     [112] => 2015-02-17 
     [97] => -5 
     [84] => 0 
    ) 

[2] => Array 
    (
     [112] => 2015-02-17 
     [97] => -5 
     [84] => 0 
    ) 

[3] => Array 
    (
     [112] => 2015-03-17 
     [97] => 10 
     [84] => 0 
    ) 

[4] => Array 
    (
     [112] => 2015-03-17 
     [97] => -5 
     [84] => 0 
    ) 

[5] => Array 
    (
     [112] => 2015-03-17 
     [97] => -5 
     [84] => 0 
    ) 

[6] => Array 
    (
     [112] => 2015-01-17 
     [97] => 2 
     [84] => 0 
    ) 

[7] => Array 
    (
     [112] => 2015-01-17 
     [97] => 13 
     [84] => 0 
    ) 

[8] => Array 
    (
     [112] => 2015-01-17 
     [97] => 2 
     [84] => 0 
    ) 
) 

例如從上方陣列I需要以下結果:

Array 
(
[0] => Array 
    (
     [112] => 2015-02-17 
     [97] => 10.00 
     [84] => 13.00 
    ) 

[1] => Array 
    (
     [112] => 2015-03-17 
     [97] => 0 
     [84] => 0 
    ) 

[2] => Array 
    (
     [112] => 2015-01-17 
     [97] => 17 
     [84] => 0 
    ) 
) 

在此所得的陣列我需要除了那些數組,其112鍵值是日期是相同的。

我有這樣的成千上萬的記錄。所以請建議簡單和最快的方式。另外我需要保留所有內部數組的鍵。

+0

你需要保持原來的結構? – dbinns66

+0

是...與我給出的結果數組相同 – Amol

回答

1

您需要使用foreach循環並迭代數組中的每個元素。

$array = array(
    array(
    112 => '2015-02-17', 
    97 => 20, 
    84 => 13 
), 
    array(
    112 => '2015-02-17', 
    97 => -5, 
    84 => 13 
), 
    array(
    112 => '2015-02-17', 
    97 => -5, 
    84 => 13 
), 
    array(
    112 => '2015-02-18', 
    97 => 10, 
    84 => 13 
), 
    array(
    112 => '2015-02-18', 
    97 => 10, 
    84 => 13 
), 
); 


$result = array(); 
foreach ($array as $item) { 
    if (isset($result[$item[112]])) { 
    foreach ($item as $key => $value) { 
     if ($key != 112) { # we don't need to sum 'date column' 
     if (isset($result[$item[112]][$key])) { 
      $result[$item[112]][$key] += $value; 
     } else { 
      $result[$item[112]][$key] = $value; 
     } 
     } 
    } 
    } else { 
    $result[$item[112]] = $item; 
    } 
} 

print_r(array_values($result)); 
+0

Thanx很多親愛的...它工作welll – Amol

1

我想操縱陣列所以112項的值是新的數組的鍵和值是每個項目的在於該112值匹配的原始列表。然後遍歷它檢查數組中是否有多於一個的項目,如果是這樣的話求和。即

$data = array(...); // all your source data 
$matches = array(); 
$results = array(); 

// reformat data into an associative array 
foreach($data as $item) { 
    if(!array_key_exists($item[112], $matches)} { 
     $matches[$item[112]] = array(); 
    } 
    $matches[$item[112]][] = $item; 
} 

foreach($matches as $items) { 
    if(count($items) == 1) 
     continue; // if we don't have at least 2 matching 112's, skip 
    $sum = array(); 
    foreach($items as $item) 
    { 
     // iterate over each key, and add it to the array 
     foreach($item as $key => $value) 
     { 
      if($key == 112) 
       $sum[$key] = $value; // assign 112, don't add it again 

      if(array_key_exists($key, $sum)) 
       $sum[$key] += $value; 
      else 
       $sum[$key] = $value; 
     } 
    } 
    $results[] = $sum; // add sum to list of sum'ed items 
} 
// $results now contains any matches sum'ed together 

我沒有測試,但應該工作

+0

更新我的原始答案,注意到一些錯別字 –