Supportnet Computer
Planet of Tech

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

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.
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!)

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


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?

<?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