php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 07.07.2006, 13:04  
Erfahrener Benutzer
 
Registriert seit: 15.10.2005
Beiträge: 231
Dilandau kann nur auf Besserung hoffen
Standard foreach() wird einmal zu oft durchlaufen

in folgender kombination aus preg_match_all() und foreach() wird der foreach() part einmal zu oft durchlaufen, wobei beim letzten durchlauf alle felder leer sind. warum? welche abhilfe gibt es?


Code:
if ($row->textwriter) {

$pattern = '
/                    # Delimiter
(?:(.*?))?           # AGSzabo
(?:@(.*?))?          # Dilandau
(?:\[(.*?)\])?       # Andreas G. Szabo
(?:\{(.*?)\})?       # München
(?:@(.*?))?          # Dilandau zweite mögliche position
(?:\/(.*?))?         # Schneidersitz 
(?:\((.*?)\))?       # was in den klammern ist
(?:,|$)	             # komma muss trennend vorhanden sein
/isx';     
preg_match_all($pattern, $row->textwriter, $array, PREG_SET_ORDER);

	$lincol = $linecolor;

	echo '<tr class="',$linecolor,'"><td class="label">';
	echo 'Text';
	echo '</td><td>';

echo '<table class="inner" cellspacing="0" cellpadding="0"><tr class="innerheadrow">
<td>By</td><td>Text</td><td>Of</td><td>Realname</td><td>Origin</td>
</tr>';

################################
############ HIER ###############
################################

foreach($array as $line) {

        $linecolor = switchcolor($linecolor);
	echo '<tr class="',$linecolor,'">';

	echo '<td>',$line[1],'';
	if (!$line[2]) $line[2] = $line[5];
	if ($line[2]) echo ', aka ',$line[2],'';
	echo '</td>';

	echo '<td>',$line[7],'</td>';
	
	# gruppe(n)

	if (!$line[6]) $line[6] = $row->gruppe;

	$ind = 0;
	$names = explode('&', $line[6]);
	foreach($names as $name) {
		if ($name) $names[$ind] = ''.$name.'';
		$ind++;
	}
	$name = implode(', ', $names);
	
	echo '<td>',$name,'</td>';
	
	# Realname und Origin

	if ($line[3]) $line[3] = "****";

	echo '<td>',$line[3],'</td>';
	echo '<td>',$line[4],'</td>';
		
	echo '</tr>';
}

####################################
############### BIS HIER ############
####################################

echo '</table>';

	echo '</td></tr>';

	# restore previous state
        $linecolor = switchcolor($lincol);
}
Dilandau ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 07.07.2006, 13:11  
Gast
 
Beiträge: n/a
Standard

Die unendliche Geschichte Teil 47...

Faulpelze wie ich hätten schon längst das halbgare Datenformat geändert.
 
Alt 07.07.2006, 13:13  
Erfahrener Benutzer
 
Registriert seit: 15.10.2005
Beiträge: 231
Dilandau kann nur auf Besserung hoffen
Standard

dieses problem jetzt hat aber nix mit dem datenformat zu tun. änderungen sind außerdem in vorbereitung.
__________________
mobilis in mobili
Dilandau ist offline  
Alt 07.07.2006, 13:18  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Dilandau
dieses problem jetzt hat aber nix mit dem datenformat zu tun. änderungen sind außerdem in vorbereitung.
a. laß Dir doch einfach mal das array anzeigen
b. vermutlich ist es das letzte Komma des letzten "Datensatzes", das preg_match_all() den Rest vom Komma bis zum Stringende noch mal parsen läßt, obwohl da nix mehr verwertbares kommt.
 
Alt 07.07.2006, 13:28  
Erfahrener Benutzer
 
Registriert seit: 15.10.2005
Beiträge: 231
Dilandau kann nur auf Besserung hoffen
Standard

ich habe doch die letzte zeile mit ?: von den ergebnissen ausgeklammert. so sehe ich darin ein problem von php und wuesste gerne wie ich vom array manuell den letzten eintrag streichen kann?
__________________
mobilis in mobili
Dilandau ist offline  
Alt 07.07.2006, 13:52  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Dilandau
ich habe doch die letzte zeile mit ?: von den ergebnissen ausgeklammert.
Aha:
Code:
(?:,|$)                # komma muss trennend vorhanden sein
Und was passiert, wenn nach dem letzten Datensatz vor dem Stringende noch ein Komma gefunden wird?

http://test.php-help.info/test/29/ (Quelltext wird angezeigt)
Zitat:
so sehe ich darin ein problem von php
Nein. Das Komma trennt und beendet nicht. preg_match_all() sucht bis zum Stringende.
Zitat:
und wuesste gerne wie ich vom array manuell den letzten eintrag streichen kann?
Laß bei der Ausgabe die Einträge weg, bei denen relevante Angaben nix enthalten. Du kannst Dich ja möglicherweise nicht darauf verlassen, daß jedes mal der letzte Datensatz mit ,\n oder ,\r\n endet.
 
Alt 07.07.2006, 14:00  
Erfahrener Benutzer
 
Registriert seit: 15.10.2005
Beiträge: 231
Dilandau kann nur auf Besserung hoffen
Standard

danke für dein beispiel aber bei mir sind keine kommas am ende, ich habe nachgeschaut. die strings hören alle einfach auf.
__________________
mobilis in mobili
Dilandau ist offline  
Alt 07.07.2006, 14:25  
Gast
 
Beiträge: n/a
Standard

Beispiele?
 
Alt 07.07.2006, 14:30  
Erfahrener Benutzer
 
Registriert seit: 15.10.2005
Beiträge: 231
Dilandau kann nur auf Besserung hoffen
Standard

kein grund zur besorgnis, die strings sind wirklich so, dass sie einfach aufhören.
__________________
mobilis in mobili
Dilandau ist offline  
Alt 07.07.2006, 16:10  
Erfahrener Benutzer
 
Registriert seit: 15.10.2005
Beiträge: 231
Dilandau kann nur auf Besserung hoffen
Standard

wie kappe ich nun den letzten eintrag aus einem array?
__________________
mobilis in mobili
Dilandau ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Eindimensionales Array ohne index per foreach erstellen phpbeginner PHP Tipps 2008 4 10.03.2008 14:18
foreach equivalent aber mit Datenmanipulation Matt PHP Tipps 2008 2 26.02.2008 16:47
Lambda-Funktion und array_map/_filter gegen foreach KingCrunch PHP Tipps 2007 5 29.04.2007 10:28
foreach verändert die werte des arrays das durchlaufen wird Crypi PHP Tipps 2007 5 10.01.2007 08:24
foreach mit zwei übergebenen Arrays ? [erledigt] horstenpeter PHP Tipps 2006 1 03.09.2006 16:47
foreach -> key snatch-ic PHP Tipps 2006 3 18.08.2006 11:58
nicht-numerisches-array durchlaufen und dabei auf nächstes.. Crypi PHP Tipps 2006 7 16.08.2006 08:38
durch foreach auch normalen String durchlaufen lassen PHP Tipps 2006 7 14.01.2006 13:20
$_FILES mit foreach() PHP Tipps 2005-2 5 20.10.2005 10:27
foreach: Fehler beim ersten Aufruf mristau2k5 PHP Tipps 2005-2 3 15.08.2005 23:14
foreach probleme PHP Tipps 2005 7 26.04.2005 17:54
foreach: Übergabe by reference Stümper PHP Tipps 2005 2 15.02.2005 15:35
for / foreach problem PHP-Fortgeschrittene 4 19.11.2004 16:58
2 Schleifen durchlaufen PHP Tipps 2004 1 14.09.2004 14:33
foreach problem mAy^daY PHP Tipps 2004 3 02.06.2004 20:29

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
foreach array letztes leer, foreach php zu oft durchlaufen, php foreach komma nicht beim letzten eintrag, seinisx

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:09 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.