Permalänk
Medlem

PHP söka ord bland rader...

Hej,
Efter idogt sökande vänder jag mig nu till er...
Jag jobbar via php med en databas i mysql där en kategori innehåller ord som är spridda över flera rader. Jag vill kunna echo:a hela raden där sökordet matchar.

Ett exempel:
En sökning på ordet "grön" ger 1 st träff i textsträngen;

"En orange apelsin
Ett grönt äpple
En gul banan"
(Databasen är från början gjord i MS Access och där visas radbrytningarna)

Svaret jag får ut är en enda lång harang (det verkar som php/mysql inte tolkar vagnreturerna); "En orange apelsin Ett grönt äpple En gul banan"

Jag skulle vilja att bara rad 2 echo:ades ut; "Ett grönt äpple"

Ska man söka och echo:a ut mellan två vagnreturer eller finns det någon variant som känner av rader, rows eller lines?

Tacksam för svar,
//joglee

Permalänk
Medlem

Teckenkodning

Hej!

Pröva med att byta teckenkodning på mysql-servern till samma som du hade på MS-Access-servern, så kommer förmodligen radbrytarna att följa med.

Permalänk
Medlem

Tack för tipset!
Visserligen så hjälpte det inte direkt, men indirekt så fick det mig att google fram "nl2br" vilket fick fram vagnreturerna. Tack!

Permalänk
Medlem

Frågan kvarstår dock...

Hur gör man för att plocka fram hela raden där sökordet finns?

Permalänk
Medlem

Det kan inte fungera med reguljära uttryck som något sådant? /(.*grönt.*)/
Eller kanske med line-break: (.*grönt.*)[^\n]

Visa signatur

Mina poster är en illusion. Det som står skrivet här över står i själva verket inte där så inget av det som du läser är sant. Inte ens den här texten. Jag har själv ingen kunskap om det jag skriver och ingen bör således läsa eller ta in den information som står skrivet.

Permalänk
Medlem

Hmmm....
Hur sparar man vilken rad sökordet förekommer i? Jag hittar bara om det existerar (true/false)

Permalänk
Medlem
Skrivet av joglee:

Hmmm....
Hur sparar man vilken rad sökordet förekommer i? Jag hittar bara om det existerar (true/false)

Kan du inte dela texten vid radbrytningar (med explode) och leta i delarna? Något i den här stilen, typ:

$regex = '...'; $resultat = mysql_...; $rader = array_filter(explode("\n", $resultat), function ($rad) use ($regex) { return (/* sant om regex matchar, falskt annars */); });

Permalänk

Du får ju inte ut från databasen vilken rad ordet förekommer i, bara att det förkommer i det databasfältet.
Leta på vilken rad får du göra med PHP.

Visa signatur

Nikon D90, Nikon D7000, SB-600, 2xYN-460, Nikkor 18-105mm/3.5-5.6 VR, Nikkor 35mm/1.8, Nikkor 50mm/1.8D, Tamron 70-200/2.8, Tokina 11-16/2.8, Nikon 85/3.5 Macro
Flickr

Permalänk
Medlem

Tack för alla tips! Nu har jag har äntligen hittat en lösning (...som ni ser handlar det inte om frukter längre).

$songs = explode("\n", $result['Samlingsverk_innehall']);
$output = preg_grep("/$find/i", $songs);
echo $songs[key($output);

En liten fundering bara...
Tyvärr får jag bara en träff per post eftersom det går inte att använda växeln "g"(Global) till preg_grep. Finns det någon annan lösning som får fram fler träffar än en?

Permalänk
Medlem
Skrivet av joglee:

Tack för alla tips! Nu har jag har äntligen hittat en lösning (...som ni ser handlar det inte om frukter längre).

$songs = explode("\n", $result['Samlingsverk_innehall']);
$output = preg_grep("/$find/i", $songs);
echo $songs[key($output);

En liten fundering bara...
Tyvärr får jag bara en träff per post eftersom det går inte att använda växeln "g"(Global) till preg_grep. Finns det någon annan lösning som får fram fler träffar än en?

Gör en while-loop som körs till resultaten tar slut

Visa signatur

[Intel i7 4770K] [ GTX 1070] [Asus ROG VI Gene] [Corsair AX860] [Corsair 16GB Vengeance LP] [120GBIntel 520] [Bitfenix Phenom M]

Citera för svar