Name des Schlüssels eines assoziativen Arrays ausgeben
Ahlex
- php
Guten Abend
ich hoffe, dass der Titel des Themas richtig gewählt ist. Mein Problem ist folgendes:
Ich habe ein solches Array:
$adressen[Name1] = array("Postleitzahl"=>$plz, "Ort"=>$ort);
$adressen[Name2] = array("Postleitzahl"=>$plz, "Ort"=>$ort);
Nun möchte ich alle Adressen "durchgehen" und dabei auch durch irgendeinen Befehl die Werte "Name1" und "Name2" ausgegeben bekommen.
Wenn ich
foreach ($adressen as $adresse=>$elem) {
echo $adresse."<br>";
}
verwende, dann wird mir nur
1
2
ausgegeben, nicht aber
Name1
Name2
.
Vielleicht kennt jemand von euch den Befehl, den ich suche?
Alexander
Hallo Ahlex!
$adressen[Name1] = array("Postleitzahl"=>$plz, "Ort"=>$ort);
foreach ($adressen as $adresse=>$elem) {
Also, eigentlich sollte bei
foreach ($array as $key => $value)
als $key der korrekte Key ausgegeben werden.
Vielleicht liegt es ja daran, daß es eher $adresse['Name'] heißen müßte, würde mich aber fast wundern, wenns daran liegt.
Vielleicht hilft Dir ja auch noch PHP Manual: Arrays - key().
MfG
Götz
Vielleicht kennt jemand von euch den Befehl, den ich suche?
Ja..
http://de3.php.net/manual/de/control-structures.foreach.php
Bietet dir folgendes beispiel an:
foreach ($arr as $key => $value) {
echo "Schlüssel: $key; Wert: $value<br />\n";
}
?>
Viel Spaß TomIRL
Guten Abend
Ja..
http://de3.php.net/manual/de/control-structures.foreach.php
Bietet dir folgendes beispiel an:
foreach ($arr as $key => $value) {
echo "Schlüssel: $key; Wert: $value<br />\n";
}
?>
In dem angegebenen Beispiel handelt es sich aber meines Wissens nach um kein assoziatives Array. Dort ist ein Array in der Art
$arr = array("eins", "zwei", "drei");
definiert, aber keines, das z.B. so aussieht:
$arr[Name1] = array("eins", "zwei", "drei");
Ich möchte ja durch irgendeinen Befehl den Begriff/den String/die Zeichenfolge (wie auch immer) "Name1" ausgegeben bekommen.
Danke trotzdem
Alexander
Guten Abend
Ja..
http://de3.php.net/manual/de/control-structures.foreach.php
Bietet dir folgendes beispiel an:
foreach ($arr as $key => $value) {
echo "Schlüssel: $key; Wert: $value<br />\n";
}
?>In dem angegebenen Beispiel handelt es sich aber meines Wissens nach um kein assoziatives Array. Dort ist ein Array in der Art
$arr = array("eins", "zwei", "drei");
definiert, aber keines, das z.B. so aussieht:
$arr[Name1] = array("eins", "zwei", "drei");Ich möchte ja durch irgendeinen Befehl den Begriff/den String/die Zeichenfolge (wie auch immer) "Name1" ausgegeben bekommen.
Naja dann probier doch das Beispiel mal aus..
Es müßte gehen.
Meines Wissens nach, sonst hätte ich Dir das Beispiel kaum genannt.
TomIRL
Hello Ahlex,
Ich habe ein solches Array:
$adressen[Name1] = array("Postleitzahl"=>$plz, "Ort"=>$ort);
$adressen[Name2] = array("Postleitzahl"=>$plz, "Ort"=>$ort);
Da stellen wir uns erstmal ganz dumm, und wählen eine andere Schreibweise. Dann wird uns nämlich deutlich, wie es geht.
$_adressen['Name1']['vorname'] = $vorname
$_adressen['Name1']['Postleitzahl'] = $plz
$_adressen['Name1']['Ort'] = $ort
$_adressen['Name1']['strasse'] = $strasse
Und nun kann man das Array auch durchgehen:
foreach($_adressen as $name => $_zusatz)
{
echo $<p class="person">$name:</p>
foreach($_zusatz as $key => $val)
{
echo "<p class="daten">$key: $val</p>;
}
echo <p class="trenner">".str_repeat('-',35)."</p>";
}
Soweit mit dem vorhandenen Array.
Das ist aber ungünstig aufgebaut. Bau es anders herum auf,
$_adressen['name'][0] = $name;
$_adressen['vormame'][0] = $vorname;
$_adressen['strasse'][0] = $strasse;
$_adressen['plz'][0] = $plz;
$_adressen['ort'][0] = $ort;
$_adressen['name'][1] = $name1;
$_adressen['vormame'][1] = $vorname1;
$_adressen['strasse'][1] = $strasse1;
$_adressen['plz'][1] = $plz1;
$_adressen['ort'][1] = $ort1;
Man muss isch dann zwar speuielle Methoden für das Einfügen und das Löschen voen "Datensätzen" machen, die benötigt man aber genaugenommen sowieso, da ja die Usereingaben geprüft werden müssen.
Die Löschmethode kann man aber auch automatisieren:
function delete($id)
{
foreach($_adressen as $key => $val)
{
unset $_adressen[$key][$id];
}
}
Der Aufbau in dieser Form hat den Vorteil, dass man die einzelnen "Spalten" mit den vorhandenen Sortiermethoden von PHP sortieren kann. Man benötigt keine Callbackfunktion dafür. Außerdem benötigt diese Schreibweise erheblich weniger Speicherplatz, als die "klassische", weil die Spaltenschlüssel nich mehr wiederholt werden müssen, sondern es nur noch einen Laufindex innerhalb der Spalte gibt.
Nachdem man die einzelnen Spalten sortiert hat, ist das Array dann gleichzeitig nach allen Spalten sortiert. Das klingt paradox, ist aber eine sehr interessante Tatsache. In der anderen Form geht das nicht. Da kann man immer nur nach einer "Spalte" sortieren.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hello,
War wohl zu früh eben. da fehlen ja diverse Zeichen *gg*
Da stellen wir uns erstmal ganz dumm, und wählen eine andere Schreibweise. Dann wird uns nämlich deutlich, wie es geht.
$_adressen = array();
$_adressen['Name1']['vorname'] = $vorname;
$_adressen['Name1']['Postleitzahl'] = $plz;
$_adressen['Name1']['Ort'] = $ort;
$_adressen['Name1']['strasse'] = $strasse;
Und nun kann man das Array auch durchgehen:
foreach($_adressen as $name => $_zusatz)
{
echo "<p class="person">$name:</p>";
foreach($_zusatz as $key => $val)
{
echo "<p class="daten">$key: $val</p>";
}
echo "<p class="trenner">".str_repeat('-',35)."</p>";
}
So sollte das aber nun funktionieren, oder?
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Guten Tag
So sollte das aber nun funktionieren, oder?
Ja, funktioniert wunderbar. Danke für deine Hilfe!
Mir wurde bei Verwendung von
foreach ($adressen as $adresse=>$elem) {
echo $adresse."<br>";
}
nur
1
2
ausgegeben, nicht aber
Name1
Name2
, weil ich vorher das Array mit einer Vergleichsfunktion sortieren ließ:
usort($adressen, "vergleich");
In dieser Vergleichsfunktion steht folgendes:
function vergleich($a, $b) {
return strnatcasecmp($a["Name"], $b["Name"]);
}
Warum dadurch die Schlüssel von Name1, Name2, usw. zu 1, 2, usw. verändert werden, weiß ich nicht. Kannst du mir das erklären? Wie kann ich eine Sortierung unter Beibehaltung der Schlüssel vornehmen?
Alexander
Hello,
Wie kann ich eine Sortierung unter Beibehaltung der Schlüssel vornehmen?
Dazu solltest Du als erstes meine Variante für die Struktur des Arrays benutzehn und dann zweitens einfach nach der entsprechenden Spalte mit einer der Array-Sortierfunktionen sortieren. Die sind unter http://de2.php.net/manual/de/ref.array.php beschrieben. Besser als dort, kann ich sie ohne besonderes Anforderungsprofil auch nicht beschreiben.
----------
Und noch ein kleiner Seitenhieb auf meinen sehr geschätzten Mitposter (er wird schon wissen, dass er gemeint ist), der mich zu den Laien zurückgeschickt hat für diese Art des Arrayaufbaus:
Wie kann man schnell Werte eines Arrays addieren?
Richtig!
Mit http://de2.php.net/manual/de/function.array-sum.php
Wenn ich doch aber ein Feld mit dem Namen und eines mit dem Gehalt und eines mit der Adresse habe?
Auch richtig!
Dann geht das Addieren oder die Mittelwertbildung oder das Sortieren oder ... des Gehaltes oder der Telefonnummer (*gg*) eben nur ganz einfach, wenn man meine Variante des Arrayaufbaus wählt. Ich nenne sie ab sofort den "Array-Spalten-Aufbau" im Gegensatz zum "Array-Block-Aufbau", der es nun wiederum ohne spezielle Funktion ermöglichen würden einen "Datensatz" hinzuzufügen oder zu entfernen.
Da aber die ganze Webprogrammierung sich von ihrer Konstruktion her bereits als "objektorientiert" darstellt, halte ich vier kleine Funktionen für select, insert, update, und delete nicht zuviel verlangt, um in einem Monster-Array die "Sätze" zu bearbeiten.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom