php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


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! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 10-04-2010, 07:33
jemont
 Registrierter Benutzer
Links : Onlinestatus : jemont ist offline
Registriert seit: Apr 2010
Beiträge: 28
jemont befindet sich auf einem aufstrebenden Ast
Standard verschachtelte Schleifen

Hallo,
ich bin PHP-Neuling und hänge fest.
ich hoffe ihr könnt mir helfen.

ich habe 2 verschachtelte Schleifen. Eine For-Schleife die durch ein Array mit Monatsnamen läuft und eine While-Schleife die Veranstaltungen aus einer Datenbank holt.

Ich will die Veranstaltungen nach Monaten auflisten und nur einmal den Monatsnamenm nennen
hier ist mein Skript


Code:
$events = mysql_query("SELECT *,MONTH(sd) AS start FROM event WHERE public='1' ORDER BY sd");

for($mnr=1;$mnr<=12;$mnr++ ){    
        
    while($event=mysql_fetch_array($events)){        
    $mnr=$event[start];
    echo"<tr><td>Veranstaltungen im $monate[$mnr]</td></tr>";        
    
    printf("
    <tr><td>%s %s %s</td></tr>\n",
    $event[sd],$event[d_city],$event[start]);
}
}
hier erhalte ich über jede Veranstaltung die Überschrift "Veranstaltungen im X". Ich schaffe es nicht mehrere Veranstaltungen unter einen monat zu listen. Ich bekomme über jeden eintrag die Monat überschrift Veranstaltung im Monat xx.
ich weiß das ich etwas brauche wie:
PHP-Code:
If($event==Monat[mnr]){ 
aber ich weiss nicht wohin in die Schleife die Bedingung muss. $event definiere ich erst in der While-Schleife Den Titel gebe ich schon in der For-Schleife aus.

Geändert von jemont (10-04-2010 um 13:24 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 10-04-2010, 10:01
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo und willkommen im Forum,

zuallererst und bevor du Hilfe bekommst, liest du dir bitte die Forenregeln durch und passt deinen Beitrag entsprechend an. Danke.

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #3 (permalink)  
Alt 10-04-2010, 17:29
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von jemont Beitrag anzeigen
ich habe 2 verschachtelte Schleifen. Eine For-Schleife die durch ein Array mit Monatsnamen läuft und eine While-Schleife die Veranstaltungen aus einer Datenbank holt.
Das ist ein für das Vorhaben ziemlich ungeeigneter Ansatz.

Die while-Schleife läuft ein mal über alle Ergebnisse - und dann kommt der nächste Durchlauf der for-Schleife, in dem es schon gar keine Ergebnisse mehr abzuholen gibt, also wird ab dann die while-Schleife überhaupt nicht mehr durchlaufen.

Zitat:
hier erhalte ich über jede Veranstaltung die Überschrift "Veranstaltungen im X".
Natürlich, du gibst den Monat ja auch mit jeder Veranstaltung zusammen aus.

Zitat:
Ich will die Veranstaltungen nach Monaten auflisten und nur einmal den Monatsnamenm nennen
Du willst also einen sogenannten Gruppenwechsel programmieren. Informiere dich mit Hilfe dieses Stichwortes.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #4 (permalink)  
Alt 10-04-2010, 17:37
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von jemont Beitrag anzeigen
PHP-Code:
for($mnr=1;$mnr<=12;$mnr++ ){    
    
// ...        
    
$mnr=$event[start];
    
// ...        

Das ist Käse In einer Schleife darfst du dir nicht die Zählvariable überschreiben.

Ich würde erstmal die Ergebnisse aus der DB in ein Array holen. Das kannst du dann nämlich beliebig oft (also für jeden Monat) durchgehen. Das MySQL-Ergebnis (wie wahsaga schon schrieb) kann man dagegen nur einmal durchlaufen, dann ist es leer.

Wenn du verschachtelte Schleifen hast, musst du dir klar werden, an welcher Stelle PHP wann vorbei kommt. Die Ausgabe des Monats muss daher innerhalb der äußeren Monatsschleife liegen, aber außerhalb (konkret vor) der inneren Schleife.

Grundlagen zum Debugging sind an dieser Stelle auch nicht unvorteilhaft, weswegen du das nachholen solltest.

Bitte PHP-Tags für PHP-Code benutzen ().

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #5 (permalink)  
Alt 11-04-2010, 01:32
jemont
 Registrierter Benutzer
Links : Onlinestatus : jemont ist offline
Registriert seit: Apr 2010
Beiträge: 28
jemont befindet sich auf einem aufstrebenden Ast
Standard

@AmicaNoctis

sorry sollte heißen
PHP-Code:
if($mnr==$event[start]) 
ist klar dass ich in der Scleife nicht die variable überschreiben kann.
Wenn ich den title in der äußeren Schleife habe, wie kann ich dann verhindern, einen title/monat zu haben wenn es keine Veranstaltung in diesem monat gibt?
ich habe ja noch nicht die variable $event[start] difiniert

@Wahsaga
danke ich suche mal nach Gruppenwechsel
Mit Zitat antworten
  #6 (permalink)  
Alt 11-04-2010, 02:36
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von jemont Beitrag anzeigen
danke ich suche mal nach Gruppenwechsel
Das würde auch deine andere Frage erübrigen. Du iterierst dann halt nicht über alle möglichen Monate, sondern nur noch über die vorhandenen.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #7 (permalink)  
Alt 11-04-2010, 12:42
jemont
 Registrierter Benutzer
Links : Onlinestatus : jemont ist offline
Registriert seit: Apr 2010
Beiträge: 28
jemont befindet sich auf einem aufstrebenden Ast
Standard

ich haben noch einen zweifel zu den gruppenwechseln.
geht das nur wenn ich aus 2 tabellen über join einen array bilde?
ich habe die moante in einem array, aber nicht aus der datenbank und habe über while einen array meines querys.
kann ich die über merge_array vereinigen und von da aus so weitermachen als sei das ein query.
dann weiss ich aber mit der while-schleife nicht weiter

oder ist es sinnvoller eine neue tabelle zu erstellen month: id,monat
aber wie vereinige ich diese mit meiner eventliste. da habe ich eine datumsspalte jjjj-mm-tt und ich nehem den monat daraus und sortiere damit die queries kann ich eine alias-spalte MONTH(sd) AS start mit einer einer tabelle joinen, in der ich id_int und moant=varchar habe?
Mit Zitat antworten
  #8 (permalink)  
Alt 11-04-2010, 13:00
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von jemont Beitrag anzeigen
ich haben noch einen zweifel zu den gruppenwechseln.
geht das nur wenn ich aus 2 tabellen über join einen array bilde?
Nein, ein Gruppenwechsel macht immer Sinn, wenn das Abfrageergebnis (egal wie es entstanden ist) mehrere gleiche Werte in derselben Spalte haben kann.

Zitat:
Zitat von jemont Beitrag anzeigen
ich habe die moante in einem array, aber nicht aus der datenbank und habe über while einen array meines querys.
Das ist sinnvoll, wenn du alle Monate auflisten willst, also auch die, zu denen es keinen Datensatz gibst. Da du aber nur die in der DB vorhandenen Monate anzeigen willst, kannst du dieses Array wegwerfen und nur den Gruppenwechsel umsetzen.

Zitat:
Zitat von jemont Beitrag anzeigen
oder ist es sinnvoller eine neue tabelle zu erstellen month: id,monat
Nein, das wäre sinnlos.

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #9 (permalink)  
Alt 11-04-2010, 13:30
jemont
 Registrierter Benutzer
Links : Onlinestatus : jemont ist offline
Registriert seit: Apr 2010
Beiträge: 28
jemont befindet sich auf einem aufstrebenden Ast
Standard

ok, jezt bin ich durcheinander gekommen.
die titel sollen monatsnamen sein auf deutsch und auf spanisch.
wenn ich kein array habe und auch keine tabelle, wo bekomme ich die monatsnamen her? in meienr eventtabelle habe ich keine monate sondern nur formatierte daten (jjjj-mm-tt).

wie kann ich bei einem gruppenwechsel also überprüfen:
wenn alter titel ungleich neuer titel
...
Mit Zitat antworten
  #10 (permalink)  
Alt 11-04-2010, 13:34
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von jemont Beitrag anzeigen
ok, jezt bin ich durcheinander gekommen.
die titel sollen monatsnamen sein auf deutsch und auf spanisch.
Achso, dann brauchst du natürlich ein Array, aber nicht, um es zu durchlaufen, sondern nur als Hashtable/Lookup-Table.

Zitat:
Zitat von jemont Beitrag anzeigen
wie kann ich bei einem gruppenwechsel also überprüfen:
wenn alter titel ungleich neuer titel
...
Entweder mit einer temporären Variable oder indem du die Daten hierarchisch in einem assoziativen Array ablegst. Beispiel hier.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #11 (permalink)  
Alt 11-04-2010, 14:18
jemont
 Registrierter Benutzer
Links : Onlinestatus : jemont ist offline
Registriert seit: Apr 2010
Beiträge: 28
jemont befindet sich auf einem aufstrebenden Ast
Standard

danke für deine Geduld,
wenn ich das Beispiel richtig verstehe, sind in meinem Fall die Buchstaben meine Monate und die Namen der Rest also Veranstaltungsname, startdatum,enddatum, usw.

ich habe folgendes Versucht:
PHP-Code:
    while($event=mysql_fetch_array($result)){
        
$event[$start][]=$event;    
    } 
um zu sehen was ich jetzt im Array habe fahre ich eine foreach-schleife nur als test:
PHP-Code:
foreach($event as $value){
    echo
"$value<br>"
und bekomme folgende Fehlermeldung:

Warning: Invalid argument supplied for foreach()

ist der arrayname nicht $event? habe auch $start und $event[start] probiert und bekomme den selben Fehler

oder habe ich zu viele elemente im Array?
Mit Zitat antworten
  #12 (permalink)  
Alt 11-04-2010, 14:21
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Wenn alles bei dir $event heißt, überschreibst du es dir doch jedesmal wieder. Das Überschreiben scheint dein Lieblingsfehler zu sein, oder?

Ein Array kannst du dir am besten mit print_r ansehen.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #13 (permalink)  
Alt 11-04-2010, 15:33
jemont
 Registrierter Benutzer
Links : Onlinestatus : jemont ist offline
Registriert seit: Apr 2010
Beiträge: 28
jemont befindet sich auf einem aufstrebenden Ast
Standard

ja überschreiben scheint mir zu gefallen,

ok das array habe ich gefüllt, aber ich habe probleme mit dem implode
ich bekomme als antwort das wort array

PHP-Code:
    while($event=mysql_fetch_array($result)){
        
$ev[$start][]=$event;    
    }
    
foreach(
$ev AS $value){
    echo 
implode (' ]'$ev).'<br>';

ich bin mir nicht sicher an welcher stelle (nach welchem zeichen) ich das array trennen soll egal was ich angebe, bekomme ich das wort array

verstehe ich richtig, das ich für jede veranstaltung ein array im array habe und für jedes array im array veranstaltung einen datensatz?
dann muss doch der erst implode nach start kommen, oder?
Mit Zitat antworten
  #14 (permalink)  
Alt 11-04-2010, 15:36
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Innerhalb der Schleife wirst du sicherlich mit $value arbeiten wollen und nicht mit $ev (dem ganzen Array).

Betreibe Debugging durch Kontrollausgaben deiner Variablen, am besten mit print_r (wie gesagt).
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!

Geändert von AmicaNoctis (11-04-2010 um 15:38 Uhr)
Mit Zitat antworten
  #15 (permalink)  
Alt 11-04-2010, 17:23
jemont
 Registrierter Benutzer
Links : Onlinestatus : jemont ist offline
Registriert seit: Apr 2010
Beiträge: 28
jemont befindet sich auf einem aufstrebenden Ast
Thumbs down

hallo, ich schon wieder!

ich habe es jetzt soweit, dass die veranstaltungen aufgelistet werden.
PHP-Code:
       while($event=mysql_fetch_array($result)){
        
$ev[$start][]=$event;    
    }
    
    foreach(
$ev AS  $key=> $value){
        foreach(
$value AS $key => $val){
    echo
"
    <tr class='evltop'><td>$val[sd]</td><td>$val[d_city]</td><td>$val[d_land]</td></tr>
    <tr><td class='evintro' colspan='3'>$val[d_desc]</td></tr>"
;
}
    }
    } 
jetzt muss ich ich die überschrift einfügen.
die Monate habe ich in einem Array

kann ich den gruppenwechsel mit foreach machen? das ist doch eigentlich nur für array. allerdings sind meine monatsnamen in einem array
ich sehe den gruppenwechsel immer im zusammenhang mit while
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
for, php, schleifen, while


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Verschachtelte while-Schleifen, Alternative ? starr112 BRAINSTORMING PHP/SQL/HTML/JS/CSS 3 30-05-2007 18:38
verschachtelte schleifen parsen TimeRaider PHP Developer Forum 8 27-02-2006 10:44
Verschachtelte flenztec PHP Developer Forum 9 26-09-2005 15:53
Verschachtelte Schleifen mit unbekannter Tiefe plastikbaum PHP Developer Forum 8 16-08-2005 09:08
verschachtelte schleifen streicher PHP Developer Forum 9 06-05-2004 18:58

Themen-Optionen
Thema bewerten
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.

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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 04:25 Uhr.