PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : in_array geht nicht


Maos
08.09.2003, 10:46:24
Hallo zusammen!
Hab folgendes Prob: möchte eine Volltextsuche in mehreren Textdateien machen. Dazu lade ich den Text der Dateien in ein Array, dann splitte ich mit ner Schleife immer einen Text in die einzelnen Wörter auf und stell die in zweites Array. Dort wollte ich dann eigentlich mithilfe von in_array nach dem Suchwort suchen - hat aber nich funktioniert.

Code sieht in etwa so aus (hab ihn grad nich bei der Hand):
...
$suchwort = $_GET['suchwort'] //wird mit URL übergeben
$array_1 =file("datei.txt");
$array_2 =explode(" ", $array_1);
if (in_array("$suchwort", $array_2))echo "Treffer;
...
Geb ich das Suchwort direkt im Code an funktionierts, so aber nicht! An was könnte das liegen?

Bis denne
Maos

crusader
08.09.2003, 14:24:51
Hallo Maos,

lass mal die Anführungszeichen in deiner if Verzweigung wegzulassen.
"$suchwort" -> $suchwort.
Dann sollte es funktionieren.

Grüße Martin

sourcecode
09.09.2003, 04:23:26
Original geschrieben von Maos
Dazu lade ich den Text der Dateien in ein Array, dann splitte ich mit ner Schleife immer einen Text in die einzelnen Wörter auf und stell die in zweites Array.

$array_1 =file("datei.txt");
$array_2 =explode(" ", $array_1);
if (in_array("$suchwort", $array_2))echo "Treffer;


1) Was du beschreibst stimmt mit deinem Quellcode nicht überein: Wo ist denn da die Schleife ? Die kann ja eigentlich nur da sein, wo du explode anwendest und eine foreach-schleife sein: Du kannst kein Array als Argument für die Funktion explode übergeben. Sonst würde das Array automatisch in ein String umgewandelt werden mit dem Inhalt Array. Der errorlog-Eintrag wäre: PHP Notice: Array to string conversion in ... on line ...

2) an der letzten zeile gefällt mir folgendes nicht: zwischen letzter klammer und echo kein leerzeichen und anführungszeichen nach stringende vergessen
3) php auch als solches ausweisen (mit php-button)

Original geschrieben von crusader
lass mal die Anführungszeichen in deiner if Verzweigung weg[...]

Da es sich um double quotes handelt, kann es das nicht sein (wäre nur bei singles quotes der fall).

und nun schließlich zum problem:

1) Verwende doch lieber zum Einlesen der Datei eine eigene kleine Funktion: http://sourcecode.dyndns.info/PHP-Funktionen/file_complete.txt
2) Dann mit explode den String (vom typ "string" !) durch das Leerzeichen aufsplitten und in_array anwenden
3) Beachte die Argumentreihenfolge und bedenke, dass zwischen Groß- und Kleinschreibung unterschieden wird.

Maos
09.09.2003, 23:27:15
Also Danke erstmal für die Antworten. Hatte ja anfänglich geschrieben das es sich nur "in etwa" um den Code handelt. Geb hier jetzt mal n echten Auszug raus (das ganze natürlich in <?php ?>)
$i=0;
while($id=mysql_fetch_array($id_sql)){

//Zuweisung text
$text="texte/$id[0].txt";

if (file_exists($text)){
//text in array abstellen - alles in einer Zeile
$suchen[$i] = fread( fopen($text, "r"), filesize($text));
fclose(fopen($text,"r"));
$array=explode(" ",$suchen[$i]);
if (in_array("$suchwort", $array)) echo"Treffer!";

$i++;
}
}



Ich ziehe also aus der DB mehrer Sätze, die jeweils den Namen der Datei darstellen. Dann wird Datei für Datei in ein array gestellt, welches mit explode nochmals aufgeteilt wird (2. Array).
Den Rest kennt ihr. S klappt einfach nich!

@sourcecode:
was meinst du mit Argumentenreihenfolge beachten?

thx
Maos

sourcecode
10.09.2003, 07:42:02
Original geschrieben von Maos
@sourcecode:
was meinst du mit Argumentenreihenfolge beachten?

Du hast sie ja richtig. Ich meins nur allgemein, dass das sicher auch eine häufige Ursache dafür sein kann, dass in_array nicht funktioniert.

Lösung: Die Variable $suchwort wird sicher über ein Formular übertragen. Vermutlich ist register_globals auf off. Somit kannst du die nicht direkt ansprechen, sondern musst es als Feld im Array der vom Browser übertragenen Variablen (Links, Formulare, Cookies) ansprechen, lies dazu ein Standardposting von c4: http://www.selfphp.info/forum/showthread.php?s=&threadid=5351&highlight=standardposting (ganz unten)