array_search

Hallo,
ich möchte mir ein Verzeichnis auslesen lassen,
welches gewisse Teile des Dateinamens in ein Array schreibt, aber nur wenn der Teil noch nicht vorhanden ist.

Ich versuche mittels array_search zu kontrollieren ob der Teil schon im Array aufgeführt ist, aber bekomm das nicht hin.
Folgendes Beispiel von Selfphp.de funktioniert:

<?PHP $array= array("a"=>"PHP","b"=\>"ASP","c"=\>"PERL"); if ($x = array\_search("PHP", $array)){ echo $array[$x] . ' wurde gefunden!'; } nun möchte ich aber das Array ohne Bezeichner bestücken, also $array=array("PHP","ASP","PERL"); Jetzt funktioniert der Code aber nicht mehr, weil $x ja immer als Rückgabe den Bezeichner enthält, mir würde aber ein true oder false reichen. Gibt es dennoch eine Möglichkeit ein Array zu durchsuchen, ohne das ganze Array durzugehen mit Foreach o.ä.? Dankend grüßt Marcel

Hi ich hab gerade mal kurz in die PHP.net
referenz geschaut:
Vor PHP 4.2.0 gibt array_search() im Fehlerfall NULL statt FALSE zurück.
und ich denke ich würde das problem ungefähr so lösen:


$x = array_search(„PHP“, $array); /* erstmal $x bestücken */

/* so abfragen das kein Null oder False zurück gegeben wurde */

if ($x != NULL and $x != FALSE )){
echo $array[$x] . ’ wurde gefunden!’;
}

Gruss chris.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

klappt, aber 1. String wird ‚übersehen‘
Hallo Christian,
danke, das Beispiel funktioniert,
jedoch habe ich jetzt rausgefunden wo mein Problem lag.
Der erste Eintrag im Array wird quasi nicht mitdurchsucht.
Bsp.:

$album=array(„REM“,„W“,„R.E.M.“,„e“);

$x = array_search(„REM“, $album); /* erstmal $x bestücken */
/* so abfragen das kein Null oder False zurück gegeben wurde */
if ($x != NULL and $x != FALSE )
{
echo $album[$x] . ’ wurde gefunden!
';
}

Hier bekomme ich keine Ausgabe,
wenn ich nun aber nach „W“, „R.E.M.“ oder „e“ suche, dann erhalte ich eine Ausgabe…

Evtl. hat ja noch jemand ne Idee, aber so bekomm ich’s auf jedenfall hin.

Gruß

Marcel

in_array
wenn Du nur ein tru/false brauchst tut es ein simples
in_array auch…

Beispiel in_array():

$os = array ("Mac", "NT", "Irix", "Linux");
if (in\_array ("Irix", $os)) 
 {
 print "Got Irix";
 }
//case insensitive... siehe:
if (in\_array ("mac", $os)) 
 {
 print "Got mac";
 }

das ganze geht auch mit case sensitive wenn man als drittes argument noch ein TRUE mitliefert…

Hallo Marcel
Das mit dem fehler von array_search()
ist ja ziemlich ärgerlich…
vieleicht einfach eine komplett eigene such funktion schreiben.
die sich mit array_keys() oder count() und einer for schleife jeden wert
überprüft…

gruss chris

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,
ich möchte mir ein Verzeichnis auslesen lassen,
welches gewisse Teile des Dateinamens in ein Array schreibt,
aber nur wenn der Teil noch nicht vorhanden ist.

also search ist in dm fall glaube ich genauso zuviel wie in_array - du brauchst zuviel code.

2 einfache varianten:

a) einfach alles reinschrieben, egal ob dopplungen auftreten und danach mit array_unique() vereinzeln. du musst halt aufpassen, dass du nicht zu viel speicher brauchst.

b) ist schon wieder komplexer:

$daten = array('PHP','PERL','ASP'); //dein array mit den gewunschten daten
$daten = array\_flip($daten); //siehe manual
schleife ()
 {
 $daten[$k]++; //$k ist halt 'PHP' od. 'PERL' od. 'ASP' 
 }
$daten = array\_keys($daten);

$album=array(„REM“,„W“,„R.E.M.“,„e“);

$x = array_search(„REM“, $album); /* erstmal $x bestücken */
/* so abfragen das kein Null oder False zurück gegeben wurde
*/
if ($x != NULL and $x != FALSE )
{
echo $album[$x] . ’ wurde gefunden!
';
}

Hier bekomme ich keine Ausgabe,
wenn ich nun aber nach „W“, „R.E.M.“ oder „e“ suche, dann
erhalte ich eine Ausgabe…

vielleicht hift dir der eintrag im manual: „Warnung“ bezügl. der Typen weiter
auf null zu pruefen ist an dem punkt zwecklos, weil die funktion kein null zurueckgibt.
und mit != false zu pruefen ist auch quatsch, weil 0 im logischen vergleich auch auf false konvertiert wird, du muss typgerecht vergleichen.
eigentlich sollte es so gehen:

$x = array\_search ... ;
if (false !== $x )
 { echo ...; }

DANKE
Moin Chris,
ja ist ein wenig ärgerlich das array_search() den ersten Eintrag nicht mitzählt,
habe den jetzt standardmäßig vorbelegt, so werden alle neuen Einträge mit ausgewertet.

Nochmals danke für deine Mühen und schönes WE

Marcel

Hallo Marcel
Das mit dem fehler von array_search()
ist ja ziemlich ärgerlich…
vieleicht einfach eine komplett eigene such funktion
schreiben.
die sich mit array_keys() oder count() und einer for schleife
jeden wert
überprüft…

DANKE
Hallo MunichFreak,
habe derzeit einfach das Array vorbelegt, so das der erste neue Eintrag mit array_search auch gelesen wird,
werde bei Gelegenheit mal in_array austesten

Danke und schönes WE

Marcel

wenn Du nur ein tru/false brauchst tut es ein simples
in_array auch…

Hi dog.je,

a) einfach alles reinschrieben, egal ob dopplungen auftreten
und danach mit array_unique() vereinzeln. du musst halt
aufpassen, dass du nicht zu viel speicher brauchst.

Gute Möglichkeit, aber für diesen Zweck erstmal nicht sinnvoll,
da später eine Überprüfung (schon beim bestücken)stattfinden soll und das Array so klein wie möglich sein sollte .

b) ist schon wieder komplexer:

$daten = array(‚PHP‘,‚PERL‘,‚ASP‘); //dein array mit den
gewunschten daten
$daten = array_flip($daten); //siehe manual
schleife ()
{
$daten[$k]++; //$k ist halt ‚PHP‘ od. ‚PERL‘ od. ‚ASP‘
}
$daten = array_keys($daten);

Muss ich mir mal in Ruhe ansehen, evtl. könnte ich da direkt meine Prüfung mit einbauen

Besten dank,
ein schönes Wochenende

Gruß

Marcel

$daten = array(‚PHP‘,‚PERL‘,‚ASP‘); //dein array mit den
gewunschten daten
$daten = array_flip($daten); //siehe manual
schleife ()
{
$daten[$k]++; //$k ist halt ‚PHP‘ od. ‚PERL‘ od. ‚ASP‘
}
$daten = array_keys($daten);

Muss ich mir mal in Ruhe ansehen, evtl. könnte ich da direkt
meine Prüfung mit einbauen

$daten[$k]++ ist die pruefung…