Index eines Elementes im numerischen Array ermitteln
Thomas Schmieder
- php
Mahlzeit,
ich habe ein numerisches Array:
$feld=array("Hund","Katze","HUhn","Kater");
Ich lösche ein Element mit unset($feld[2]);
Ich gebe das Array mit
foreach($feld as $wert)
{
echo $wert."<br />";
}
aus. Während der Ausgabe würde ich gerne den numerischen Index ermitteln, mit dem ich auch auf die Elemente des Arrays zugreifen kann. Gibt es dafür eine Möglichkeit?
Dass die Bearbeitung mit array_splice() und array_slice() besser ist, weiß ich. Hier geht es mur um die _Möglichkeit_, den Index zu erfragen.
Grüße
Tom
Hallo Thomas,
Ich gebe das Array mit
foreach($feld as $wert)
{
echo $wert."<br />";
}aus. Während der Ausgabe würde ich gerne den numerischen
Index ermitteln, mit dem ich auch auf die Elemente des
Arrays zugreifen kann. Gibt es dafür eine Möglichkeit?
Nein. Geh die Schleife in einer for-i-Schleife durch.
Dass die Bearbeitung mit array_splice() und array_slice()
besser ist, weiß ich. Hier geht es mur um die
_Möglichkeit_, den Index zu erfragen.
Da muesstest du suchen. Ist der Array sortiert, geht das
relativ zuegig. Ist der Array unsortiert, kann das uU sehr
langsam sein. Zu Such- und Sortier-Algorithmen kann ich
'Algorithmen in C' empfehlen.
Gruesse,
CK
Hallo Christian,
Nein. Geh die Schleife in einer for-i-Schleife durch.
Da muesstest du suchen. Ist der Array sortiert, geht das
relativ zuegig. Ist der Array unsortiert, kann das uU sehr
langsam sein. Zu Such- und Sortier-Algorithmen kann ich
'Algorithmen in C' empfehlen.
Das habe ich befürchtet. Werde ich also die neuen Sachen NICHT mehr mit Direkzuweisungen und Unset schreiben. sondern grundsätzlich array_slice und array_splice verwenden. Die alten Scripte werde ich dann wohl nicht mehr ergänzen. Das ist mir zu stressig, das überall zu überprüfen.
Danke Dir
Tom
Mahlzeit,
liebend gern... *g*
foreach($feld as $wert)
{
echo $i;
echo $wert."<br />";
$i++;
}
da er ja von anfang an durchzählt enthält $i immer den index,aber
ich vermute das meinst Du nicht, aber wie meinst du es dann, in welcher Form brauchst du den index während der ausgabe???
LG
romy
Grüße
Tom
Hoi romy,
foreach($feld as $wert)
{
echo $i;
echo $wert."<br />";
$i++;
}da er ja von anfang an durchzählt enthält $i immer den
index,
Nein. Die Reihenfolge, in der man die Elemente in einem
foreach()-Durchlauf bekommt, ist nicht definiert.
Gruesse,
CK
Hoi romy,
foreach($feld as $wert)
{
echo $i;
echo $wert."<br />";
$i++;
}da er ja von anfang an durchzählt enthält $i immer den
index,Nein. Die Reihenfolge, in der man die Elemente in einem
foreach()-Durchlauf bekommt, ist nicht definiert.
das war mir nicht bewusst, aber gut zu wissen
na ich dachte mir schon dass da irgendwas zu einfach war
danke
ciao romy
Gruesse,
CK
Hi Christian,
da er ja von anfang an durchzählt enthält $i immer den
index,Nein. Die Reihenfolge, in der man die Elemente in einem
foreach()-Durchlauf bekommt, ist nicht definiert.
Liegen die Elemente als einfache verkettete Liste vor, oder als Baumstruktur, z.B. B+Tree?
Tom
Hallo Thomas Schmieder,
Liegen die Elemente als einfache verkettete Liste vor, oder
als Baumstruktur, z.B. B+Tree?
Weder noch. Als Hashtable.
Gruesse,
CK
Hallo Romy,
foreach($feld as $wert)
{
echo $i;
echo $wert."<br />";
$i++;
}da er ja von anfang an durchzählt enthält $i immer den index,aber
ich vermute das meinst Du nicht, aber wie meinst du es dann, in welcher Form brauchst du den index während der ausgabe???
Das ist leider nicht so. Da dem Array mit unset() in Element geklaut wurde, ist dort jetzt eine Indexlücke. Wenn man unter dem gleichen Index mit $feld[index]="neuer Wert" wieder einen Wert zuweist, dann wird dieser am Ende der Kette eingefügt, aber mit der alten Index-Nummer.
Ich habe noch alte Scripte, die mit unset() und Zuweisung arbeiten und nun um eine kleine Funktion ergänzt werden sollten. Das geht aber leider nicht, wenn ich den Index nicht ermitteln kann.
Du hast in Deiner Lösung nur die Elemente gezählt während der Verarbeitung mit foreach89. Foreach() kann ich aber nicht einsetzen, da es die übergebenen Argumente kapselt, also nur _innerhalb_ des foreach-Blockes zur Verfügung stellt. Ich brauche sie aber auch außerhalb, muss daher mit for( ...) arbeiten.
Grüße
Tom
Hallo!
Das ist leider nicht so. Da dem Array mit unset() in Element geklaut wurde, ist dort jetzt eine Indexlücke. Wenn man unter dem gleichen Index mit $feld[index]="neuer Wert" wieder einen Wert zuweist, dann wird dieser am Ende der Kette eingefügt, aber mit der alten Index-Nummer.
Wenn die Index-Nummer stört, dann kopiere den Array einfach mit http://www.php3.de/manual/de/function.array-values.php und Du hast einen frischen Index. Oder Du verwendest in der Schleife http://www.php3.de/manual/de/function.array-key-exists.php, um jedesmal zu prüfen ob der Schlüssel ($i) existiert. Aber die Varianten in meinem Posting oben sind denke ich besser.
Grüße
Andreas
Hi,
Wenn die Index-Nummer stört, dann kopiere den Array einfach mit http://www.php3.de/manual/de/function.array-values.php und Du hast einen frischen Index.
Das merke ich mir. Ist schon mal in die richtige Richtung.
Oder Du verwendest in der Schleife http://www.php3.de/manual/de/function.array-key-exists.php, um jedesmal zu prüfen ob der Schlüssel ($i) existiert. Aber die Varianten in meinem Posting oben sind denke ich besser.
Geht leider erst ab 4.1.?
Ich habe hier noch 4.0.4 - Systeme. Noch kann ich nicht upgrade.
Nochmals Dank
Tom
Hi!
Geht leider erst ab 4.1.?
Ich habe hier noch 4.0.4 - Systeme. Noch kann ich nicht upgrade.
Bei sowas hilft meist(wie in diesem Fall) ein Blick in die Kommentare, da stehen meist zig Workarounds, aber das einfachste wäre ja an Stelle von
if (array_key_exists...)
einfach
if(isset($array[$i]))
Grüße
Andreas
Hallo!
ich habe ein numerisches Array:
$feld=array("Hund","Katze","HUhn","Kater");
Ich lösche ein Element mit unset($feld[2]);
Ich gebe das Array mit
foreach($feld as $wert)
{
echo $wert."<br />";
}
Da gäbe es z.B.:
foreach ($feld as $key => $value){
echo $key.": ".$value."<br />";
}
http://www.php3.de/manual/de/control-structures.foreach.php
oder auch
foreach($feld as $wert)
{
$key = array_keys ( $feld, $wert);
echo $key[0].": ".$wert."<br />";
}
http://www.php3.de/manual/de/function.array-keys.php
Grüße
Andreas
Hi Andreas,
es wäre zu schön gewesen...
ich habe ein numerisches Array:
Da gäbe es z.B.:
foreach ($feld as $key => $value){
echo $key.": ".$value."<br />";
}
oder
foreach($feld as $wert)
{
$key = array_keys ( $feld, $wert);
echo $key[0].": ".$wert."<br />";
}
Die zweite Möglichkeit sah auf den ersten Blick verlockend aus. Leider bezieht sie sich auch auf ein assoziatives Array, also mehrdimensional. Ich habe aber nur numereische Arrays, also eindimensionale, so wie si z.B. durch $datei=file("Dateiname"); erzeugt werden.
Schade!
Trotzdem vielen Dank
Tom
Hi!
Die zweite Möglichkeit sah auf den ersten Blick verlockend aus. Leider bezieht sie sich auch auf ein assoziatives Array, also mehrdimensional. Ich habe aber nur numereische Arrays, also eindimensionale, so wie si z.B. durch $datei=file("Dateiname"); erzeugt werden.
Bei mir klappt beides:
<?php
$array = array ("grün","rot","gelb");
$key = array_keys ($array,"gelb");
echo $key[0]."\n\n";
foreach ($array as $key => $value){
echo "$key: $value\n";
}
?>
Grüße
Andreas
Frudiges Hallo nochmal,
<?php
$array = array ("grün","rot","gelb");
$key = array_keys ($array,"gelb");
echo $key[0]."\n\n";foreach ($array as $key => $value){
echo "$key: $value\n";
}
?>
Es ist tatsächlich so, dass es funktioniert. Ich bin positiv überrascht. Nun hast Du baer bestimmt einen Schokoweihnachtsmann verdient.
Tom
<img src="http://www.rerei.de/wutzblatt_archiv/wdf/naughty.gif" border="0" alt="">
Da gäbe es z.B.:
foreach ($feld as $key => $value){
echo $key.": ".$value."<br />";
}
http://www.php3.de/manual/de/control-structures.foreach.phpoder auch
foreach($feld as $wert)
{
$key = array_keys ( $feld, $wert);
echo $key[0].": ".$wert."<br />";
}
http://www.php3.de/manual/de/function.array-keys.php
Hallo,
oder auch:
while (list($key, $value) = each($feld)) {
echo $key.": ".$wert."<br>";
}
Gruß
Wolfgang