Arrayvergleich

Hallo liebe Experten,

ich suche gerade nach einer Möglichkeit ein Array zu durchsuchen mit Werten eines anderen Arrays.
An sich wäre das nun nur ein wenig Aufwändig, nicht aber unmöglich, das ganze ist aber noch nicht so leicht wie es sich jetzt noch anhört, denn es handelt sich um mehrdimensionale Arrays.

Im einen Array sind Informationen gespeichert, die dann den abgleich unterschiedlich handhaben sollen.
Sprich es steht im schlüssel des arrays, ob es eine strict suche sein soll oder eine like-suche.
Nun ist mir aber nicht bekannt, dass ich ein array_search auch mit einer like suche durchführen kann. Ich lasse mich aber sehr gerne eines besseren belehren… :wink:

Im Prinzip sieht das nun so aus:
$array[strict][suche1][wo] = 1; // das gibt fest in welchem Unterschlüssel des anderen Arrays gesucht werden soll
$array[strict][suche1][wort] = „Hallo“; //Das Wort, das gefunden werden soll

nun habe ich ein anderes Array das etwa so aussieht
$inhalt[teil1][1] = „Hallo“;
$inhalt[teil2][1] = „Welt“;
$inhalt[teil1][2] = „Weltuntergang“;

das würde jetzt noch gehen weil ich hier array_search verwenden kann…

Das gleiche soll aber auch funktionieren wenn ich eine like suche auf „Welt“ starten würde - dann soll auch der „Weltuntergang“ gefunden werden… Nur wie?

meine Idee war mit array_walk alles durchzugehen und mit der strpos zu arbeiten. Allerdings fürchte ich mich davor ein wenig weil es schnell passieren könnte, dass die Arrays Rund 100+ Werte bekommen werden, die alle durchsucht werden müssten, teilweise mit verknüpften Bedingungen und ich will ja nicht, dass mir mein Apache abstürzt…

Wer weiss Rat?
Datenbanklösungen gehen leider nicht, da ich die Informationen von einem anderen Server beziehe. Ich müsste wenn dann zwischenspeichern…
Aber macht das Sinn 100 Einträge anzulegen und gleich wieder zu löschen? Vor allem - wer schützt mich vor Scriptüberläufen und vermixten Datenbankinhalten…?

Danke schon mal…
Munich

nur eine Idee
Hi,

zunächst einmal: Du kannst ja Fragen stellen!! :wink:

Möglicherweise ist es am einfachsten eine mysql-Tabell temporär anzulegen, alle Daten reinzuschreiben und sie dann zu durchsuchen. Das ist aber nicht wirklich die Idee, die ich vorschlagen wollte (sollte aber gehen, von der Performance abgesehen…)

function such\_string($arrayvar)
{
global $pattern;
return preg\_match($pattern,$arrayvar);
}

foreach ($array as $val)
{
$pattern=".\*".$val.".\*";
$returnarray[$val]=array\_filter($inhalt,"such\_string");
}

Ein Beispiel:
$array[strict][suche1][wort] = „Hallo“;
$array[strict][suche2][wort] = „Welt“;

$inhalt[teil1][1] = „Hallo“;
$inhalt[teil2][2] = „Welt“;
$inhalt[teil1][3] = „Weltuntergang“;

=>
$returnarray[„Hallo“]=Array(„1“=>„Hallo“);
$returnarray[„Welt“]=Array(„2“=>„Welt“, „3“=>„Weltuntergang“);

Ich denke einfach, dass array_filter schneller arbeiten müsste als array_walk, da es an dem array selbst nichts ändert.

Hoffe das hilft.

Gruss, Omar Abo-Namous

huhu ^^

zunächst einmal: Du kannst ja Fragen stellen!! :wink:

naja, auf die einfachen Sachen komm’ ich mittlerweile schon allein *g*
Die kniffligen Sachen sind die wo ich stecken bleibe :wink:

Möglicherweise ist es am einfachsten eine mysql-Tabell
temporär anzulegen, alle Daten reinzuschreiben und sie dann zu
durchsuchen. Das ist aber nicht wirklich die Idee, die ich
vorschlagen wollte (sollte aber gehen, von der Performance
abgesehen…)

was denkst Du ist performanter?
Schliesslich wäre es dann ja entweder ein ellenlanges query mit massig ors und evtl concat-einsatz oder sehr viele queries incl der vielen insert queries…

der Hinweis auf array_filter ist gut…
aber ob ich ihn so umsetzen kann weiss ich noch nicht…
jedenfalls Danke* für den Tipp…

Munich

Hi,

Möglicherweise ist es am einfachsten eine mysql-Tabell
temporär anzulegen, alle Daten reinzuschreiben und sie dann zu
durchsuchen. Das ist aber nicht wirklich die Idee, die ich
vorschlagen wollte (sollte aber gehen, von der Performance
abgesehen…)

was denkst Du ist performanter?
Schliesslich wäre es dann ja entweder ein ellenlanges query
mit massig ors und evtl concat-einsatz oder sehr viele queries
incl der vielen insert queries…

von meiner Seite war das nicht sehr ernst gemeint. Datenbankverbindung aufbauen > sql-statement zusammenstellen (müsste dann die längere Variante sein) > Abfrage schicken > Ergebnisse empfangen und dann durchgehen… Alles nur um ein „LIKE“ zu benutzen, ich glaube kaum, dass es lohnt…

der Hinweis auf array_filter ist gut…
aber ob ich ihn so umsetzen kann weiss ich noch nicht…
jedenfalls Danke* für den Tipp…

Sag bescheid, wenn das klappt, mit dem Befehl kenn ich mich auch nicht aus…

Gruss, Omar Abo-Namous

von meiner Seite war das nicht sehr ernst gemeint.

hehe, die Sache mit der niedergeschriebenen Ironie :wink:
*reingefallenbin* ^^

Datenbankverbindung aufbauen > sql-statement
zusammenstellen (müsste dann die längere Variante sein) >
Abfrage schicken > Ergebnisse empfangen und dann
durchgehen… Alles nur um ein „LIKE“ zu benutzen, ich glaube
kaum, dass es lohnt…

stimmt *g*

der Hinweis auf array_filter ist gut…
aber ob ich ihn so umsetzen kann weiss ich noch nicht…
jedenfalls Danke* für den Tipp…

Sag bescheid, wenn das klappt, mit dem Befehl kenn ich mich
auch nicht aus…

also ich hab irgendwann rausgefunden dass es mir nicht so viel bringt…
Vor allem aber deshalb, weil ich inzwischen den Befehl imap_search gefunden habe und nachdem ich die emails gemäss meinen Spamfiltern vergleichen will ist das die beste alternative, auch wenn es ein wenig doof ist weil es nicht einstellbar ist ob der Inhalt genau oder nur zum Teil übereinstimmt, aber das hab ich auf andere Art gelöst…

Danke trotzdem nochmal :smile: