| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

01-01-2006, 20:44
|
|
Thoma
Newbie
|
|
Registriert seit: Jan 2006
Beiträge: 17
|
|
Durchschnittswert eines Arrays
Hallo Leute,
erst mal nen Frohes neues Jahr.
Ich möchte zwei Arrays addieren und den Durchschnitt in einen neuen Array ablegen:
PHP-Code:
<?
$a = array(1,2,3); // Array A
$b = array(4,5,6); // Array B
$e = array(); // Ergebnis-Array
$a = array_pad ($a, max(count ($a),count ($b)),0); // Array A und B
$b = array_pad ($b, max(count ($a),count ($b)),0); // gleich lang machen
for ($i=0; $i<(count ($a)) ; $i++)
{
$c = $c + ($a[$i]+$b[$i]);
$d = $c /($i+1);
array_push ($e, $d); // Array e füllen
}
print_r($e); // Array e ausgeben
?>
Nun wollte ich fragen ob das vielleicht auch einfacher geht oder ob es vielleicht eine Funktion dafür gibt.
Mit freundlichen Grüßen
Thoma
|

01-01-2006, 21:19
|
|
MelloPie
PHP Master
|
|
Registriert seit: Jan 2002
Ort: Hessen
Beiträge: 4.380
|
|
den durchschnitt bekommste mit array_sum() und count() schon mal einfacher.
__________________
Beantworte nie Threads mit mehr als 15 followups...
Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25
|

01-01-2006, 21:33
|
|
Thoma
Newbie
|
|
Registriert seit: Jan 2006
Beiträge: 17
|
|
Ich will nicht den Durchschnitt des ganzen Arrays, sondern immer den der vorangegangenen Werte.
Im Beispiel wäre das dann:
$a = array(1,2,3);
$b = array(4,5,6);
$e = array(5,6,7);
Es kann aber auch vorkommen, das die Arrays A und B unterschiedlich viele Werte haben.
Beispiel:
$a = array(3,2,4,4);
$b = array(4,5,6);
$e = array(7,7,8,7);
|

01-01-2006, 21:46
|
|
MelloPie
PHP Master
|
|
Registriert seit: Jan 2002
Ort: Hessen
Beiträge: 4.380
|
|
dann nimm doch Deine funktionalität,
warum allerdings der Durchschnitt von 4,1 = 5 sein soll das weisst nur Du?
__________________
Beantworte nie Threads mit mehr als 15 followups...
Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25
|

01-01-2006, 21:50
|
|
Thoma
Newbie
|
|
Registriert seit: Jan 2006
Beiträge: 17
|
|
_
Geändert von Thoma (01-01-2006 um 21:55 Uhr)
|

01-01-2006, 21:53
|
|
Thoma
Newbie
|
|
Registriert seit: Jan 2006
Beiträge: 17
|
|
Wie ich oben bereits schrieb, werden der beiden Arrays zunächst addiert (1+4=5).
Ich dachte, es gäbe vielleicht etwas einfacheres, sowohl um in zwei Arrays das jeweils n-te Element zu addieren, wie auch einen laufenden Durchschnitt zu bilden.
|

01-01-2006, 23:11
|
|
penizillin
PHP Guru
|
|
Registriert seit: Feb 2004
Beiträge: 10.166
|
|
hab ich jetzt auch nicht verstanden, was du möchtest.
arrays sind mengen, und eine addition ist in dem sinne nicht das gleiche, wie eine vereinigung. was jetzt "vorangegangene" werte sind ist mir ebenso unklar wie das, was du berechnest und was $a, $b und $e sein soll.
|

01-01-2006, 23:45
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Mir ist egal, was du vorhast. Ich sehe, was bei obigem Code rauskommt und dass dein error_reporting keine Notices ausgibt - sonst gäbe es "undefined variable c".
Also klappt auch dies hier:
PHP-Code:
$a = array(1,2,3);
$b = array(4,5,6);
for ($i=0, $max=max(count($a),count($b)); $i<$max; $i++) {
$e[]=($sum=($a[$i]+$b[$i])+$sum)/($i+1);
}
print_r($e);
Macht genau das selbe, nutzt lediglich ein paar Features der Sprache. Unschön, aber kurz.
|

01-01-2006, 23:49
|
|
Thoma
Newbie
|
|
Registriert seit: Jan 2006
Beiträge: 17
|
|
Dachte der Quelltext würde sich mehr oder weniger selbst erklären.
$a und $b sind Arrays mit beliebigen ganzzahligen Werten, die Werte mit dem selben Index sollen jeweils addiert werden.
also:
$c[0] = $a[0]+$b[0];
$c[1] = $a[1]+$b[1];
$c[2] = $a[2]+$b[2];
...
in $e steht der Durchschnitt.
also
$e[0] = (1+4)/1 = 5
$e[1] = (1+4+2+5)/2 = 6
$e[2] = (1+4+2+5+3+6)/3 = 7
um es vielleicht etwas einfacher zu machen, jetzt nur der Durchschnitt ohne Addition.
Beispiel:
$a = array(1,3,5);
$e = array(1,2,3);
Die Berechnung sieht hier so aus:
$e[0] = (1)/1 = 1
$e[1] = (1+3)/2 = 2
$e[2] = (1+3+5)/3 = 3
Natürlich müssen die Zahlen im array $e nicht immer Ganzzahlig sein.
|

01-01-2006, 23:57
|
|
Thoma
Newbie
|
|
Registriert seit: Jan 2006
Beiträge: 17
|
|
Vielen Dank, in etwa so was habe ich gesucht, ich meine zur Not wäre meins ja gegangen, aber es sollte ja auch halbwegs effizient sein.
Wobei ich schon sagen muss, das Übersicht auch nicht total unwichtig ist.
Gruß Thoma
Denke so ist es halbwegs übersichtlich und kurz:
PHP-Code:
<?
$a = array(1,2,3);
$b = array(4,5,6);
$max = max(count($a),count($b));
$sum = 0;
for ($i=0; $i<$max ; $i++)
{
$sum = $sum + ($a[$i]+$b[$i]);
$e[] = $sum /($i+1);
}
print_r($e);
?>
Geändert von Thoma (02-01-2006 um 00:32 Uhr)
|

02-01-2006, 00:34
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Das ist noch halbwegs übersichtlich, im Vergleich zu
PHP-Code:
for ($i=0; $i<$max=max(count($a),count($b)); $e[]=($sum+=$a[$i]+$b[$i])/($i+=1));
|

02-01-2006, 01:16
|
|
Thoma
Newbie
|
|
Registriert seit: Jan 2006
Beiträge: 17
|
|
Ja vielen Dank, aber man muss es ja nicht gleich übertreiben. Funktioniert wunderbar. Nur die letzte Version werde ich nicht verwenden, wo einige ja schon mühe mit dem ersten Quellcode hatten.
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|