WinFuture-Forum.de: [php] Variablen Als Text Miteinander Verknüpfen - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

[php] Variablen Als Text Miteinander Verknüpfen


#1 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 30. September 2009 - 14:34

Da bin ich mal wieder nach langer Zeit. Ich tüftel zurzeit an ein paar Funktionen die mit Datums und Zeitwerten arbeiten und komme nun nicht mehr weiter. ;D

Folgendes Problem:

Ich habe ein Array z in dem jeweils die Anzahl der Tage, Stunden, Minuten und Sekunden stehen.

Ich habe nun eine Funktion in der man ein Datum und einen Zeitwert eingeben kann "30.09.2009 15:22:56". Die Funktion zählt dann einfach die Tage, Stunden, usw bis runter.
Also wie ein Countdown. Das funktioniert auch schon super.


Ich möchte nur folgende Features soll/kann die Funktion machen:
- Wenn es mehrere tage sind soll es auf Plural achten (Tag/Tage,Stunde/Stunden)
Das klappt. Nur jetz möchte ich die einzelnen Zeit/Datums-Elemente aber miteinander verbinden:

"Noch: " 2 Tage, 3 Stunden und 12 Minuten"
oder
"Noch: " 1 Tag und 1 Stunde"
oder
"Noch: " 1 Tag, 1 Stunde, 5 Minuten und 12 Sekunden"
oder
"Noch: "12 Sekunden"

Also sollen die letzten zwei Elemente immer mit einem "und" verbunden werden außer es ist nur ein Element vorhanden. Naja und der Rest soll mit einem "," getrennt werden.
Da komme ich nun nicht weiter, ich könnte zwar einfach alle Möglichkeiten durchrattern, aber das sind sehr sehr viele.

Hier die Struktur des Arrays:

$z = array(
		'tag'	 => $days,
		'stunde'  => $hours,
		'minute'  => $minutes,
		'sekunde' => $seconds
	);


Würde auch mit den Variablen gehen, wie sie heißen seht ihr ja im Array!

Ich hoffe mir kann jemand mal einen Denkanstoß oder Tipps geben.

Danke,

Toasterfraktion
0

Anzeige



#2 Mitglied ist offline   bluescorp 

  • Gruppe: aktive Mitglieder
  • Beiträge: 323
  • Beigetreten: 23. Oktober 04
  • Reputation: 0
  • Wohnort:nähe Wien

geschrieben 01. Oktober 2009 - 14:00

also ich hätte es so gemacht:

CODE

$tag = xx;
$stunde = xx;
$min = xx;
$sek = xx;

if($sek == "")
$ausgabe = $tag .",".$stunde." und ".$min;
else
$ausgabe = $tag.",".$stunde.",".$min." und ".$sek;

echo $ausgabe;


halt jeweils überprüfen welche felder es gibt und dann die Variable $ausgabe überschreiben

edit:
sry, hattest ja geschrieben, dass du das nicht willst :/ hab ich überlesen
btw: soviele Möglichkeiten sind es ja auch wieder nicht.

Dieser Beitrag wurde von bluescorp bearbeitet: 01. Oktober 2009 - 14:06

0

#3 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.947
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 01. Oktober 2009 - 14:06

@bluescorp Frage nicht verstanden. Oder doch ;)

Mir fällt spontan auch keine andere Möglichkeit ein, außer alle Möglichkeiten durchzugehen. Wenn du allerdings auch 0 anzeigen würdest, hättest du keinen Aufwand.
0

#4 Mitglied ist offline   Master_P. 

  • Gruppe: aktive Mitglieder
  • Beiträge: 340
  • Beigetreten: 18. Mai 04
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Irgendwo im Nirgendwo (Westerwald)
  • Interessen:vieles

geschrieben 06. Oktober 2009 - 09:32

Bin nicht mehr so ganz in PHP drin, sollte aber mit PHP-Funktionen soweit umsetzbar sein.
Soweit ich mich erinnere gibt es ja ne ganze Menge Array-Funktionen.

- Leere Array-Schlüssel löschen
- Array per Schleife durchlaufen
-- Ein ',' anhängen, wenn es nicht der letzte oder vorletzte Array-Wert ist
-- Ein 'und' anhängen, wenn es der vorletzte Array-Wert ist

Hoffe einen Denkansatz gegeben zu haben :blink:
mfg
M@$t3r_P.

Das Ziel jedes Menschen liegt 2 Meter unter der Erde.
0

#5 Mitglied ist offline   Mr. Floppy 

  • Gruppe: VIP Mitglieder
  • Beiträge: 4.126
  • Beigetreten: 01. Juli 08
  • Reputation: 271
  • Geschlecht:Männlich

geschrieben 06. Oktober 2009 - 10:44

Ich kenne mich mit der Syntax von PHP überhaupt nicht aus, aber folgendes müßte funktionieren. Um mir ein paar ifs zu sparen, würde ich den String von hinten aufbauen. In einer Schleife wird das Array von hinten durchlaufen. Ist der Wert größer 0, wird er dem String hinzugefügt. Mit einem Counter entscheidet man, ob ein und oder ein Komma dazu kommt. Ist die Schleife durch und der String nicht leer, kommt ein Noch davor, ansonsten ist die Zeit abgelaufen.

counter = 0;
output = "";

for(i = length(array); i > 0; i--)
{
  # es gibt was zum Hinzufügen
  if(array[i] > 0)
  {
	# und bzw. , vorne einfügen und anschließend(!) counter erhöhen
	output = ((counter++ == 1) ? " und" : ",") + output;
	# Zahlenwert hinzufügen
	output = " array[i]" + output;
  }
}
output = (output != "") ? "Noch" + output : "Countdown abgelaufen!";


Die Bezeichnung der einzelnen Werte (Stunde, Minute, etc.) kann auch über den Counter erfolgen, falls das nicht mit dem Hash geht, oder was immer das ist. Das letzte Zeichen ist immer ein Komma und müßte am Ende noch abgeschnitten/ersetzt werden. Je nachdem, ob Indizes bei 0 oder 1 starten, müßte i entsprechend angepaßt werden.

Dieser Beitrag wurde von Mr. Floppy bearbeitet: 06. Oktober 2009 - 10:57

0

#6 Mitglied ist offline   Master_P. 

  • Gruppe: aktive Mitglieder
  • Beiträge: 340
  • Beigetreten: 18. Mai 04
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Irgendwo im Nirgendwo (Westerwald)
  • Interessen:vieles

geschrieben 06. Oktober 2009 - 12:11

Doch mal kurz nachgelesen und eine ganz andere Möglichkeit gefunden :blink:

<?
$z = array(
		'tag'	 => '5 Tage',
		'stunde'  => '3 Stunden',
		'minute'  => '',
		'sekunde' => '10 Sekunden'
	);

//Array filtern (alles was false ist fliegt raus) und Kommagetrennt in einen String umwandeln
$str = implode(', ', array_filter($z));

//String umdrehen, das erste Komma in ein und verwandeln und wieder umdrehen
$str = strrev(preg_replace ('/ ,/', ' dnu ', strrev($str), 1));

?>


Nicht unbedingt schön, aber selten oder wie nannte sich das Sprichwort noch?
mfg
M@$t3r_P.

Das Ziel jedes Menschen liegt 2 Meter unter der Erde.
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0