WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Printa ut alla rader med strängen 'Johanna' [PHP] (https://www.wn.se/forum/showthread.php?t=1040717)

addiction1 2010-02-28 13:30

Printa ut alla rader med strängen 'Johanna' [PHP]
 
Hej allesammans,

Jag har en en textfil med en massa olika namn, ett namn på varje rad såhär:

Johanna Lindblom
Sandra Grankvist
Svensson Johanna

Min fråga är hur jag t.ex. söker efter alla "Johanna" i denna textfil med PHP och hämtar ut alla rader som innehåller Johanna?

1infiniteloop 2010-02-28 13:56

Har du tillgång till en databas? Skulle isf läsa in alla namn i det och sen
blir det mycket enkelt att söka därifrån. Ändras inte textfilen ofta så
lär det bli stor prestandaskillnad också än att läsa från textfilen.

addiction1 2010-02-28 15:37

Tack för ditt snabba svar 1infiniteloop. Då har jag ett nytt problem:

PHP-kod:

$string '
Alice Agnes
Maja Alexandra
Ella Alice
Emma Alicia
Elsa Alma
Alva Alva
Julia Amanda
Linnea Anna
Wilma Astrid
Ebba  Cornelia
Molly Ebba
Nellie Edith
Klara  Elin
Agnes Elina
Ida  Elise
Elin Ella
Olivia Ellen
Emilia Ellie
Isabelle Elsa
Amanda Elvira
Saga Emelie
Moa Emilia
Ellen Emma
Alma Emmy
Matilda Ester
Hanna Evelina
Nova  Fanny
Sara Felicia
Alicia Filippa
Felicia Freja
Stella Frida
Tuva  Greta
Astrid Hanna
Isabella Hedda
Meja Hilda
Selma Ida
Thea Inez
Elvira Ingrid
Lilly Iris
Lovisa Isabella
Tindra Isabelle
Lova Jasmine
Nora Johanna
Sofia Joline
Ester Josefin
Nathalie Julia
Vera Kajsa
Tilde Klara
Tyra Lea
Emelie Leia
Filippa Lilly
Freja Lina
Signe Linn
Tilda Linnea
Siri Lisa
Lea Liv
Stina Livia
Cornelia Lova
Inez Lovisa
Edith Maja
Linn Malva
Mira Maria
Jasmine Matilda
Liv Meja
Leia Melissa
Emmy Mira
Frida Miranda
Lisa Moa
Ellie Molly
Josefin My
Svea Märta
Rebecka Nathalie
Evelina Nellie
Ronja Nicole
Kajsa Nora
Anna Nova
Joline Olivia
Elina Rebecka
Elise Ronja
Märta Rut
Lina Saga
Hilda Sara
Iris Selma
Ingrid Signe
Melissa Siri
Livia Sofia
Vilda Sofie
My Stella
Sofie Stina
Malva Svea
Nicole Thea
Victoria Tilda
Fanny Tilde
Greta Tindra
Hedda Tuva
Alexandra Tyra
Maria Vera
Rut Victoria
Miranda Vilda
Johanna Wilma'


Hur ska jag på enklast sätt få ut varje namn utan mellanslag i en array. Så att det blir [0] = Alice, [1] = Agnes etc etc.

Jag har testat med:
PHP-kod:

$pieces explode(" "$string); 

Men det ger följande resultat:

Kod:

Array
(
    [0] =>
Alice
    [1] => Agnes
Maja
    [2] => Alexandra
Ella
    [3] => Alice
Emma
    [4] => Alicia
Elsa
    [5] => Alma
Alva
    [6] => Alva
Julia
    [7] => Amanda
Linnea
    [8] => Anna
Wilma

Vilket inte blir helt rätt.

Tack på förhand.

tartareandesire 2010-02-28 15:54

Du måste ta hänsyn till radbrytningarna också.

addiction1 2010-02-28 15:59

Citat:

Ursprungligen postat av tartareandesire (Inlägg 20344359)
Du måste ta hänsyn till radbrytningarna också.

Vet inte riktigt hur du menar, men jag la till \n\r i explode:n och då fick jag detta resultatet istället:

Kod:

Array ( [0] => Alice Agnes Maja Alexandra Ella Alice Emma Alicia Elsa etc )

Westman 2010-02-28 16:05

Gör en replace och byt ut alla radbrytningar till mellanslag först och sen explodera den med mellanslag kanske?

Jimpsson 2010-02-28 17:02

Skrev ihop något..
Scriptet kollar om söksträngen matchar för- och efternamn.

Kod:

<?php
       
        $file                = 'file.txt';
        $search        = 'Johanna';
       
        /* --------------------- */
       
        $fp                        = @fopen($file, 'r') or die('Filen kunde inte läsas in');
        $contents                = NULL;
        $result                = array();
       
        if(is_resource($fp)){
               
                while( ! feof($fp)) {
                        $contents .= fgets($fp);
                }
       
                $lines = explode("\n", $contents);
               
                for($i = 0; $i < count($lines); $i++){
                       
                        $person = explode(' ', $lines[$i]);
                       
                        if((stripos($person[0], $search) !== FALSE) OR (stripos($person[1], $search) !== FALSE)){
                                echo $lines[$i] . '<br />' . PHP_EOL;
                        }
                       
                }
       
        } else {
               
                echo 'Något gick snett..';
               
        }


objx 2010-02-28 23:38

Jag skulle föredra denna funktion:
http://se2.php.net/manual/en/function.file.php

Alltså:

$lines = file("lista.txt");

foreach ($lines as $line_num => $line) {

if(strpos(strtolower($line),"johanna") !== false){
print "Namnet Johanna förekom på rad $line_num<br />";
}
}

Magnus_A 2010-03-01 09:13

Problemet blir då att hitta Johan men inte Johanna.

iXam 2010-03-02 12:58

Citat:

Ursprungligen postat av objx (Inlägg 20344401)
Jag skulle föredra denna funktion:
http://se2.php.net/manual/en/function.file.php

Alltså:

$lines = file("lista.txt");

foreach ($lines as $line_num => $line) {

if(strpos(strtolower($line),"johanna") !== false){
print "Namnet Johanna förekom på rad $line_num<br />";
}
}

Otestat :
Kod:

$lines = file("lista.txt");

foreach ($lines as $line_num => $line) {

  if(preg_match('/^johanna$/sim', $line)){
    print "Namnet Johanna förekom på rad $line_num<br />";
  }
}



Alla tider är GMT +2. Klockan är nu 14:17.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson