foreach: Abfrage des nächsten Elements und continue
Enrico
- php
Hallo,
ich habe folgendes, zu Testzwecken fest vorgegebenes, Array:
$EmpfaengerArray = array ("Anrede" => "Herrn",
"Vorname" => "Enrico",
"Nachname" => "Mustermann",
"Strasse" => "Mustermann-Weg",
"Hausnummer" => "53",
"Postleitzahl" => "12345",
"Ort" => "Musterstadt");
Nun möchte ich daraus einen Empfängerblock erzeugen in der Form
Herrn
Enrico Mustermann
Mustermann-Weg 53
12345 Musterstadt
Dies möchte ich über folgenden Code umsetzen:
$Empfaenger = "";
foreach ($EmpfaengerArray as $Schluessel => $Wert)
{
$Empfaenger .= $Wert;
if ($Schluessel == "Anrede")
$Empfaenger .= "\n";
else
if ($Schluessel == "Vorname")
{
$Nachname = Weiter ($EmpfaengerArray, "Vorname");
$Empfaenger .= $Nachname .= "\n";
continue;
}
else
if ($Schluessel == "Strasse")
{
$Nachname = Weiter ($EmpfaengerArray, "Strasse");
$Empfaenger .= $Hausnummer .= "\n";
continue;
}
}
Die Funktion "Weiter" soll mir nun den nächsten Variableninhalt, ausgehend vom aktuell ermittelten Variableninhalt liefern:
function Weiter ($arr, $key)
{
$keys = array_keys($arr);
$keyIndexes = array_flip($keys);
$return = array();
if (isset($keys[$keyIndexes[$key]+1]))
$return[] = $keys[$keyIndexes[$key]+1];
else
$return[] = $keys[0];
return $return;
}
In meinem derzeitigen Ansatz sind "Nachname" und "Hausnummer" aber undefiniert, d.h. die Abfrage des Rückgabewertes funktioniert nicht.
Gebe ich nun hinter die beiden Variablen jeweils "[0]" oder "[1]" an, dann bekomme ich die Meldung "Undefined offset: 0".
Wie komme ich richtig an den Wert ran?
Vielen Dank und Gruß,
Enrico
Die Funktion "Weiter" soll mir nun den nächsten Variableninhalt, ausgehend vom aktuell ermittelten Variableninhalt liefern:
???
Du hast doch den Variableninhalt bereits im $Wert stehen, oder um was genau geht es dir hier?
Hallo Encoder,
danke für Deine Antwort.
Ich wollte einfach bestimmte Variablen in einer Zeile zusammenfassen, habe dies aber nun anders und viel einfacher gelöst, indem nach "Nachname", "Hausnummer" und "Ort" einfach einen Zeilenumbruch eingefügt wird, sonst nicht.
Gruß,
Enrico
Tach!
ich habe folgendes, zu Testzwecken fest vorgegebenes, Array:
$EmpfaengerArray = array ("Anrede" => "Herrn",
"Vorname" => "Enrico",
"Nachname" => "Mustermann",
"Strasse" => "Mustermann-Weg",
"Hausnummer" => "53",
"Postleitzahl" => "12345",
"Ort" => "Musterstadt");
> Nun möchte ich daraus einen Empfängerblock erzeugen in der Form
>
> Herrn
> Enrico Mustermann
> Mustermann-Weg 53
> 12345 Musterstadt
>
> Dies möchte ich über folgenden Code umsetzen:
Warum machst du das denn so kompliziert?
printf("%s\n%s %s\n%s %s\n%s %s", $EmpfaengerArray['Anrede'],
$EmpfaengerArray['Vorname'], $EmpfaengerArray['Nachname'],
$EmpfaengerArray['Strasse'], $EmpfaengerArray['Hausnummer'],
$EmpfaengerArray['Postleitzahl'], $EmpfaengerArray['Ort']);
Sowas bekommt man also im Prinzip mit einem Einzeiler hin. sprintf() liefert zurück und gibt nicht gleich aus. Wenn die Reihenfolge im $EmpfaengerArray immer gleich und garantiert ist, geht es mit v(s)printf() auch kürzer. Auch echo, einfache Stringverknüpfung, Ausgabe in HTML eingebettet und so weiter geht auch auf diese Weise ohne igendwelche komplizierten Schleifen und Array-Manipulationen.
Noch ein Tipp: wenn du sowas wie die Funktion Weiter() schreibst, dann tu deinen Lesern und vor allem deinem späteren vom natürlichen Vergessensprozess nicht verschonten Dir-selbst einen Gefallen und kommentiere, was diese Funktion bezweckt, besonders bei solch einem Von-Hinten-durch-die-Brust-ins-Auge-Array-Zugriff. Die Namensvergabe "Weiter" allein ist nicht sehr hilfreich.
dedlfix.
Hallo!
Warum machst du das denn so kompliziert?
Das frage ich mich allerdings auch. Dein Hinweis ist hier wirklich mehr als angebracht.
Dazu kommt, dass es mit next() bereits eine native Funktion gibt um sich durch ein Array zu hangeln. Das ist aber nur ein allgemeiner Hinweis und kein Aufruf das hier einzusetzen.
Grüße, Matze