login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Array samenvoegen en optellen (Opgelost)

Offline denniseik - 14/07/2011 15:48
Avatar van denniseikLid Ik wil onderstaande array's samenvoegen tot één array.
  1. [11] => 9
  2. [12] => 8
  3. [10] => 7
  4. [4] => 6
  5. )
  6.  
  7. [6] => 8
  8. [10] => 7
  9. [11] => 6
  10. )

Daarbij wil ik dubbele key's samenvoegen en de values optellen zoals in het voorbeeld hieronder:

  1. [11] => 15
  2. [12] => 8
  3. [10] => 14
  4. [4] => 6
  5. [6] => 8
  6. )


Je hebt de functie array_merge en de functie array_sum, maar is er ook een combinatie?

3 antwoorden

Gesponsorde links
Offline Tuinstoel - 14/07/2011 16:43
Avatar van Tuinstoel PHP expert Ik heb even een methode er voor geschreven; vrij experimenteel en ook nog behoorlijk generaliseerbaar, maar je kunt er je doel wel mee halen;

  1. <?php
  2. $a = array();
  3. $a[11] = 9;
  4. $a[12] = 8;
  5. $a[10] = 7;
  6. $a[4] = 6;
  7.  
  8. $b = array();
  9. $b[6] = 8;
  10. $b[10] = 7;
  11. $b[11] = 6;
  12.  
  13. function MergeAndSum($a,$b) {
  14.  
  15. $result = array();
  16.  
  17. foreach($a as $key => $item) {
  18. $result[$key] = $item;
  19. if(isset($b[$key])) {
  20. $result[$key] += $b[$key];
  21. unset($a[$key]);
  22. unset($b[$key]);
  23. }
  24. }
  25.  
  26. foreach($b as $key => $item) {
  27. $result[$key] = $item;
  28. if(isset($a[$key])) {
  29. $result[$key] += $a[$key];
  30. }
  31.  
  32. }
  33. return $result;
  34. }
  35.  
  36. echo '<pre>';
  37. print_r(MergeAndSum($a,$b));
  38. ?>
Bedankt door: denniseik
Offline denniseik - 14/07/2011 16:51
Avatar van denniseik Lid Super! Hier kan ik wel iets mee 
Offline Tuinstoel - 14/07/2011 17:58
Avatar van Tuinstoel PHP expert Ik heb het nog iets verbeterd; kan vast nog wel wat beter gezien de 2 foreaches (N^2)
  1. <?php
  2. $a = array();
  3. $a[11] = 9;
  4. $a[12] = 8;
  5. $a[10] = 7;
  6. $a[4] = 6;
  7.  
  8. $b = array();
  9. $b[6] = 8;
  10. $b[10] = 7;
  11. $b[11] = 6;
  12.  
  13. function MergeAndSum() {
  14.  
  15. $numberOfArguments = func_num_args();
  16. if ($numberOfArguments > 0) {
  17. $result = array();
  18. $allArrays = func_get_args();
  19.  
  20. foreach ($allArrays as $singleArray) {
  21. foreach ($singleArray as $key => $value) {
  22. if (!isset($result[$key])) {
  23. $result[$key] = $value;
  24. } else {
  25. $result[$key] += $value;
  26. }
  27. }
  28. }
  29.  
  30. return $result;
  31. }
  32. return false;
  33. }
  34.  
  35. echo '<pre>';
  36. print_r(MergeAndSum($a, $b));
  37. echo '</pre>';
  38. ?>
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.211s