Arrays in Schleifen zusammenrechnen

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
Ivan
Mitglied
Beiträge: 267
Registriert: 28.12.2004 17:26
Wohnort: Mössingen, BW
Kontaktdaten:

Arrays in Schleifen zusammenrechnen

Beitrag von Ivan »

hallo,

ich hab mit folgendem Code ein Problem.

Code: Alles auswählen

<html>
<body>
<?php
$table = explode("</table>", $_POST["comment"]);

$td = explode("</td>", $table[2]);
$i = count($td);

unset($td[0], $td[1], $td[2], $td[3], $td[4], $td[5], $td[6], $td[7], $td[8], $td[9]);

echo "<table width='80%' border='1' cellspacing='0'>
  <tr>";

for ($n=0; $n<$i; $n++)
{
echo "$td[$n]";
}
echo "</td></tr></table>";

$m = 6;

for ($q=0; $q<$i; $q=$q+10)
{
$m = $m+10;

$ergebnis = $ergebnis + $td[$m];

echo "$td[$m]<br>";
}
echo "$ergebnis";
?>
</body>
</html>
Ich will die Arrays $td[$m] zusammenzählen und das Ergebnis nach der Schleife ausgeben.
Aber das Ergebnis ist immer 0.

Ich hab mir sagen lassen, dass man auf Variablen, die innerhalb einer Schleife erzeugt wurden, außerhalb kein Zugriff mehr hat...stimmt das??

Wenn ja, wie kann ich mein Problem lösen??

Gruß
Ivan
Benutzeravatar
Nico Haase
Mitglied
Beiträge: 1100
Registriert: 10.08.2003 15:19
Wohnort: Neu-Anspach / Darmstadt
Kontaktdaten:

Beitrag von Nico Haase »

dass du auf variablen, die innerhalb einer schleife angelegt werden, außerhalb keinen zugriff hast, stimmt nicht, das gilt für funktionen. lösungsvorschlag: setz einmal vor der schleife $ergebnis = 0, vielleicht gehts dann.
Buchtips.net bietet mehr als 2500 Buchrezensionen
Benutzeravatar
Ivan
Mitglied
Beiträge: 267
Registriert: 28.12.2004 17:26
Wohnort: Mössingen, BW
Kontaktdaten:

Beitrag von Ivan »

geht auch net.
Ich hab auch noch andere Zahlen eingegeben.
Genau dieser werden dann am Schluss ausgegeben.

Also muss ich davon ausgehen, dass der die Schleife gar net beachtet??
Benutzeravatar
mad-manne
Ehemaliges Teammitglied
Beiträge: 5403
Registriert: 18.03.2005 10:00
Wohnort: Marl im Ruhrgebiet

Beitrag von mad-manne »

Also mal abgesehen davon dass mir nicht ganz klar ist, was du im oberen teil deines Codes anstellst.(mittels unset löschst du da 'ne Menge, aber du wirst schon wissen warum :wink: )

Aber hier ist ja auch einiges verwurschtelt:

Code: Alles auswählen

$m = 6;

for ($q=0; $q<$i; $q=$q+10)
{
$m = $m+10;

$ergebnis = $ergebnis + $td[$m];

echo "$td[$m]<br>";
}
echo "$ergebnis"; 
Deine Schleifenvariable ist $q und du addierst hier immer nur den Inhalt von $td[16], weil du zunächst $m=6 festlegst und in der Schleife immer wieder $m=$m+10 berechnest, was eben immer 16 ergibt!

Hilft dir das evtl. auf die Schliche?

Gruss,
Manne.
Try not. Do or do not. There is no try. (YODA)
Supportanfragen via E-Mail oder PN werden ignoriert
Benutzeravatar
Nico Haase
Mitglied
Beiträge: 1100
Registriert: 10.08.2003 15:19
Wohnort: Neu-Anspach / Darmstadt
Kontaktdaten:

Beitrag von Nico Haase »

hehe, das kann natürlich sein. die ausgabe, die du in der schleife machst, erscheint auch nich? dann wird die schleife direkt übersprungen, weil $q < $i von vornherein false ergibt
Buchtips.net bietet mehr als 2500 Buchrezensionen
Benutzeravatar
Ivan
Mitglied
Beiträge: 267
Registriert: 28.12.2004 17:26
Wohnort: Mössingen, BW
Kontaktdaten:

Beitrag von Ivan »

mad-manne hat geschrieben:Deine Schleifenvariable ist $q und du addierst hier immer nur den Inhalt von $td[16], weil du zunächst $m=6 festlegst und in der Schleife immer wieder $m=$m+10 berechnest, was eben immer 16 ergibt!

Hilft dir das evtl. auf die Schliche?

Gruss,
Manne.
Das passt schon so, wie es ist!

ich will da einen Quelltext aufteilen.
Die ersten paar <td> sind nutzlos, deshalb lösch ich die.
hehe, das kann natürlich sein. die ausgabe, die du in der schleife machst, erscheint auch nich? dann wird die schleife direkt übersprungen, weil $q < $i von vornherein false ergibt
Doch, die Ausgabe, die ich in der Schleife mache, also "$td[$m]<br>" tut.

Gibts denn keine Möglichkeit, wie ich das Ergebnis auswerten kann??

Gruß
Ivan
Benutzeravatar
mad-manne
Ehemaliges Teammitglied
Beiträge: 5403
Registriert: 18.03.2005 10:00
Wohnort: Marl im Ruhrgebiet

Beitrag von mad-manne »

Ivan hat geschrieben:Das passt schon so, wie es ist!
Offenbar ja nicht :roll:

Abgesehen davon, dass mir jetzt nicht klar ist, ob deine Schleife überhaupt ausgeführt wird (siehe Anmerkung von Nico) addierst du immer den Wert aus $td[16] in dein Ergebniss!

Das erscheint mir relativ sinnfrei.

Welche Werte für $i vermutest du denn in deinem Script?

Gruss,
Manne.
Try not. Do or do not. There is no try. (YODA)
Supportanfragen via E-Mail oder PN werden ignoriert
Benutzeravatar
Ivan
Mitglied
Beiträge: 267
Registriert: 28.12.2004 17:26
Wohnort: Mössingen, BW
Kontaktdaten:

Beitrag von Ivan »

ich hab was verwunderliches ausprobiert.

Code: Alles auswählen

for ($q=0; $q<$i; $q=$q+10)
{
$m = $m+10;

$ergebnis = $ergebnis + $q;

echo "$td[$m]_$q<br>";
}

echo "<br />$ergebnis";
Wenn ich es mit $ergebnis = $ergebnis + $q; mache, funktioniert es.
Das heisst, er zeigt mir nach der Schleife ganz normal das Additionsergebnis der Variablen $q an.

Das heisst ja, dass es funktionieren muss. Nur mit Arrays funktioniert es komischerweise nicht....oder sehe ich das falsch??

Gruß
Ivan
Benutzeravatar
mad-manne
Ehemaliges Teammitglied
Beiträge: 5403
Registriert: 18.03.2005 10:00
Wohnort: Marl im Ruhrgebiet

Beitrag von mad-manne »

Ivan hat geschrieben:Das heisst ja, dass es funktionieren muss. Nur mit Arrays funktioniert es komischerweise nicht....oder sehe ich das falsch??
Vermutlich ja :wink:

Lass uns mal was anderes machen ...
Welche Werte vermutest du denn eigentlich in dem Array $td?

Lass sie dir doch mal DEBUG-mässig so ausgeben:

Code: Alles auswählen

$fields = count($td);
for ( $loop=0; $loop <$fields; $loop++ )
{
echo 'TD-Feldindex# ' . $loop . ' ==> ' . $td[$loop] . '<br />';
}
Diesen Code packst du einfach mal ganz unten in dein Script ... was wird da ausgegeben?

Dann sehen wir weiter ...
Manne.
Try not. Do or do not. There is no try. (YODA)
Supportanfragen via E-Mail oder PN werden ignoriert
Benutzeravatar
Ivan
Mitglied
Beiträge: 267
Registriert: 28.12.2004 17:26
Wohnort: Mössingen, BW
Kontaktdaten:

Beitrag von Ivan »

da kommt genau das raus:^^

http://web159.server-drome.info/td-feldindex.txt

Nicht wundern...das ist ne Transferliste eines Onlinegames :D

Gruß
Ivan
Antworten

Zurück zu „Coding & Technik“