PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   Foreach-Schleifen Problem! (http://www.selfphp.de/forum/showthread.php?t=6308)

Satherlor 06.12.2003 00:54:14

Foreach-Schleifen Problem!
 
Moin,
ich habe eine Foreach-schleife und möchte gerne eine Variable einfügen, damit ich weiß, den wievielten durchlauf die Schleife hat. Also quasi wie bei einer For-Schleife das "i". (i=0; i++). Wenn ich eine Varible nehme und sie am ende der Schleife (vor die Geschweifteklammer) $Durchlauf = $Durchlauf + 1; sach, dan geht das nicht! Wie kann ich das machen?

Viburnum opulus 06.12.2003 01:25:27

warum nimmst du in dem fall nicht einfach ne for schleife?

PHP-Code:

for($i=0;$i<count($array_variable);$i++){

// mit $array_variable[$i] greifste dann auf deine array-variable zu




Satherlor 06.12.2003 10:10:38

das ist zwar auch gut, aber ich benötige/habe ja ne Foreach-Schleife. Die ließt nämlich Daten zeilenweise aus einer Datei aus. Jetzt brauche ich allerdings eine Möglichkeit, um in einer generierten HTML Datei zwischen den verschiedenen Zeilen zu differenzieren, weil diese tabellarisch formatiert wurden. Der User kann dann noch Veränderungen vornehmen, aber dazu brauch ich ja irgendeinen Anhaltspunkt, welche der Zeile nun verändert werden soll. Das wolte/will ich mit dem $Durchlauf machen. Und dazu brauche ich bei der foreach-Schleife quasi ein "i".

oder habt ihr eine andere Idee, wie ich zeilenweise auslesen kann und jede zeile mit einer anderen Zahl ($Duchrlauf) deklarieren kann!?

chris17 06.12.2003 10:16:57

Moin Satherlor,

könntest Du mal ein bissl Code posten.

Gruss

Satherlor 06.12.2003 10:21:54

$IP = $_SERVER['REMOTE_ADDR'];
$datensatz_array = file("../warenkorb/$IP.txt");


// mit dieser foreach-schleife wird der Datensatz durchforstet.
foreach($datensatz_array as $datensatz){

// hier zerlegen wir den aktuellen datensatz an des trennzeichens "~"
$datenzelle = explode('~', chop($datensatz));
//Daten liegen in Form von 123~123~123~123~123 vor!

$Durchlauf = "0";
.
.
.

<td valign=center align=left bgcolor="#c3c7e1">
<FONT FACE="Arial, Helvetica" COLOR="black" SIZE="-1"><?= $datenzelle[0]; ?> </FONT>
</td>

(usw.)

.
.
.

$Durchlauf = $Durchlauf + 1;

}

chris17 06.12.2003 10:43:42

Hi,

evtl. ist es geschickter die Variable vor der Schleife zu initialisieren:
PHP-Code:

$Durchlauf "0";

foreach(
$datensatz_array as $datensatz){
// usw

//$Durchlauf = $Durchlauf + 1;
$Durchlauf++; // Ist weniger zu schreiben ;-)


edit:
Bin mir nicht sicher was Du jetzt mitzählen willst -> Die Zeilen in der Datei oder die Infos in jeder Zeile...

Satherlor 06.12.2003 11:13:39

Daten in der Datei:

123~123~123~123
456~456~456~456
789~789~789~789

so, wenn ich nun mit der foreach schleife das auslese und wie in dem geposteten Script dann das "~" enferne und dann für jede Zeile $datenzelle[0],$datenzelle[1],$datenzelle[2],$datenzelle[3] hab und der User die möglichkeit hat was zu verändern, dann bringt es mir ja nichts, dass ich weiß, dass die $datenzelle[2] in 999 verändert wurde, weil ich ja noch wissen muss welche Zeile das war. Deshalb brauch ich das $Duchlauf.
Mein Server ist gerade ausgefallen, deswegen kann ich im moment das nicht ausprobieren. Aber thx erstmal!

sourcecode 06.12.2003 11:30:34

Zitat:

Original geschrieben von chris17
PHP-Code:

$Durchlauf "0"



PHP-Code:

<?php
$Durchlauf 
0// geht ja hier nicht um Strings, sondern um Zahlen
?>


Satherlor 06.12.2003 13:05:00

Jaaaa, danke! Geht jetzt! Weiß nicht, ob es jetzt daran lag oder an einer anderen Veränderung, die ich vorgenommen hab, aber es geht!

chris17 06.12.2003 13:12:18

@sourcecode
Logo, PHP "verzeiht" es zwar, es ist aber unsauber.
Daher ein wichtiger Hinweis von Dir.

@Satherlor
Hast Du Dir schon Gedanken gemacht wie Du die veränderten Infos wieder zurück in die Datei schreibst?

Sind in jeder Zeile immer die gleiche Anzahl an Informationen?

Eine Idee, die ganzen Zähler brauchst Du evtl. gar nicht:
PHP-Code:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<table>
<?php
if($_POST['submit'])
{
    
// im Array $_POST['info'] hast Du
    // jetzt alle Infos, die Du wieder
    // in die Datei zurückschreiben kannst
    
print_r($_POST['info']);
}
$IP $_SERVER['REMOTE_ADDR'];
$datensatz_array file("../warenkorb/$IP.txt");
$reihe 0;
$lfd_nr 0;

foreach(
$datensatz_array as $datensatz){ 
    
    
$reihe++;    
    
    
    
$datenzelle explode('~'chop($datensatz));
?>

<tr>
<?php
    $pos_in_reihe 
0;
    for(
$i 0$i count($datenzelle); $i++)
    {
        
$lfd_nr++;
        
        
$pos_in_reihe++;
    
?>
    <td valign=center align=left bgcolor="#c3c7e1">
<?php
    
echo "Nr.".$lfd_nr." Reihe: ".$reihe." Pos in Reihe: ".$pos_in_reihe;
?>
    </td>
    <td valign=center align=left bgcolor="#c3c7e1">
    <input type="text" name="info[]" value="<?php echo $datenzelle[$i]; ?>" size="5">
    </td>
<?php
    
}
?>
</tr>
<?php
    
}
?>
</td>
</tr>
</table>
<input type="submit" name="submit">
</form>

edit:
Hab Dein Post zu spät gesehen...


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:49:42 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.