比较2个数组并添加相似的值

时间:2014-01-28 17:47:27

标签: php arrays loops

我在PHP中有2个数组。其中一个包含日期列表,另一个包含数字列表。

   Array1
    (
        [0] => 2010-06-14
        [1] => 2010-06-14
        [2] => 2010-06-14
        [3] => 2014-01-26
        [4] => 2014-01-26
    )
   Array2
    (
        [0] => 120
        [1] => 100
        [2] => 60
        [3] => 140
        [4] => 30
    )

Array2中的值[0]属于Array1中的日期[0]。我想要做的是根据日期将Array2中的所有值一起添加。任何匹配的日期都应将其值相加。所以例如在最后我想要像:

$date = 2010-06-14;
$value = 280;

$date = 2014-01-26;
$value = 170;

......等等。

我搜索了网站,但无法找到我需要的确切内容。任何帮助将不胜感激......

4 个答案:

答案 0 :(得分:0)

$newArray = array();
for($i = 0; $i < count(Array1); $i++) {
  $newArray[$Array1[$i]] = $Array2[$i];
}

echo $newArray[$date1] + $newArray[$date2];

将日期作为键,以便于数学运算。

答案 1 :(得分:0)

$sum=0;              // New Element
$Array3[][]=0;       // New 2D array

$p=0;                                  // Counter for 2D array
for($i=0;$i<5;$i++)                   // Single loop for traversing
{
$date=Array1[$i];                     // Start for a date
while($date==Array1[$i]){             // For for Similar date
$sum=$sum+Array2[$i];                 // Adding values of similar date
$i++;                                 // Increment array
}
$Array3[$p]["date"]=$date;            // Array3 date element
$Array3[$p]["sum"]=$sum;              // Array4 date element
$i--;                                 // Reducing a value which is incremented in while loop
}

Array3就像

Array3
    (
        [0] => array( 'date' => "  ",'sum' => " ")
        [1] => array( 'date' => "  ",'sum' => " ")
     )

答案 2 :(得分:0)

您是否正在尝试计算 Array2 Array1 中与“某些预定义目标值相匹配”的条目中的所有值?

如果是这样,这个 for for loop version 应该有效:

private function forLoopVersion($array1, $array2, $target) {
 $result = 0;
 for ($i = 0; $i < count($array1); ++$i) {
  if ($array1[$i] == $target) {
    $result += $array2[$i];
  }
 }
 return $result;
}

此外,此 foreach循环版可能有效,但我不知道$key的{​​{1}}是否可用于索引$array1中的元素。你可以尝试一下:

$array2

答案 3 :(得分:0)

您可以迭代$values,并从$dates获取相应的日期,以用作结果数组中的键。

foreach ($values as $key => $value) {    
    $result[$dates[$key]] = $value + ($result[$dates[$key]] ?? 0);    
}

输出将如下:

array (size=2)
  '2010-06-14' => int 280
  '2014-01-26' => int 170