Supportnet / Forum / Skripte(PHP,ASP,Perl...)
array durchsuchen
Frage
mein beispiel:
$array[1][titel] = "asdaa";
$array[2][titel] = "sssw";
$array[3][titel] = "2sa";
$array[5][titel] = "w34w";
echo array_search("2sa",$array);
ich möchte den $array durchsuchen, und überprüfen ob irgend wo im titel 2sa vorkommt, wenn ja dann den array schlüssel in meinem beispiel 3 ausgeben. wie löse ich das am einfachsten?
Antwort 1 von Nessus
Ähm....
Du stellst eine Frage und beantwortest sie gleich....
Cool..
Oder habe ich was falsch verstanden?
Nessus
Du stellst eine Frage und beantwortest sie gleich....
Cool..
Oder habe ich was falsch verstanden?
Nessus
Antwort 2 von Schnoof
Genau: Du erstellst eine Schleife, die von $i = 0 bis $i = (Länge des Arrays - 1) durchzählt. Darin testest Du, ob $array[$i][title] == 2sa ist. Wenn ja, gibst Du $i zurück und brichst Du die Schleife ab.
Das sollte es sein, denke ich.
Bis denne!
Schnoof
for ($i = 1; $i <= sizeof($array); $i++) {
if ($array[$i][title] == "2sa") {
echo $i ;
break ;
}
} Das sollte es sein, denke ich.
Bis denne!
Schnoof
Antwort 3 von dominik__
hast du falsch verstanden. die möglichkeit, mit array_search in_array geht nicht...
ich könnte das mit einer schleife vergleichen, meiner meinung nach aber nicht die optimale lösung (server-power!)
ich könnte das mit einer schleife vergleichen, meiner meinung nach aber nicht die optimale lösung (server-power!)
Antwort 4 von Nessus
Hi,
ach so....
Aber wg. der Server-Power mußt Du dir keine Sorgen machen, das dürfte im Millisekundenbereich liegen, wenn dein Server nicht gerade ein P100 ist...
Nessus
ach so....
Aber wg. der Server-Power mußt Du dir keine Sorgen machen, das dürfte im Millisekundenbereich liegen, wenn dein Server nicht gerade ein P100 ist...
Nessus
Antwort 5 von dominik__
aber wenn ich zuerst den array erstelle dann einen anderen array mit ner schleife ausgebe, und für jeden eintrag das 2ten arrays die suche ausführe... mal sehen..
Antwort 6 von semi
Was hälts Du von dieser Lösung?
Die einzelnen Einträge werden nur dann ausgegeben, wenn deren Titel noch nicht in diesem Array drin ist.
Alternativ kannst Du mit array_filter ein zweites Array ohne doppelte Einträge erstellen.(Ähnliche Vorgehensweise wie oben)
Gruß,
Michael
<?php
// Bereits gelesene Titel
$collected = array();
function ausgabe(&$item, $key)
{
global $collected;
$titel = $item['titel'];
// Wenn noch nicht gelesen
if(!isset($collected[$titel]))
{
// Als gelesen markieren
$collected[$titel]=1;
// Und ausgeben
echo $item['titel'] . "<br>";
}
}
$array[0]['titel'] = "2sa";
$array[1]['titel'] = "asdaa";
$array[2]['titel'] = "sssw";
$array[3]['titel'] = "2sa"; // wird nicht ausgegeben
$array[4]['titel'] = "w34w";
array_walk($array, "ausgabe");
?>Bereits gelesene Titel werden in ein Array geschrieben. Die einzelnen Einträge werden nur dann ausgegeben, wenn deren Titel noch nicht in diesem Array drin ist.
Alternativ kannst Du mit array_filter ein zweites Array ohne doppelte Einträge erstellen.(Ähnliche Vorgehensweise wie oben)
Gruß,
Michael
Antwort 7 von semi
Ohh!? Wer lesen kann ist im Vorteil :-)
Vergiss meine Antwort. Nach sowas hat keiner gefragt.
Gruß,
Michael
Vergiss meine Antwort. Nach sowas hat keiner gefragt.
Gruß,
Michael

