Avatar billede gigi1 Nybegynder
29. april 2013 - 14:34 Der er 16 kommentarer og
1 løsning

Opdeling af navn med explode

Hvis jeg har følgende variable.


$q = 'Anders A Andersen';


Hvordan får jeg delt dette i 2 variabler:


$q1 = 'Anders A';
$q2 = 'Andersen';


Hvis en anden person har flere mellemnavne skal disse også være i $q1

Jeg skal i første omgang bruge explode() ikke?
Avatar billede repox Seniormester
29. april 2013 - 14:56 #1
[code]
<?php

$navn = 'Anders A Andersen';
$parts = explode(" ", $navn);

$q2 = array_pop($parts);
$q1 = implode(" ", $parts);
[/code]
Avatar billede repox Seniormester
29. april 2013 - 14:57 #2
lækkert setup... prøver igen...

<?php

$navn = 'Anders A Andersen';
$parts = explode(" ", $navn);

$q2 = array_pop($parts);
$q1 = implode(" ", $parts);
Avatar billede michael_stim Ekspert
29. april 2013 - 15:07 #3
Eller:


$q = 'Anders A Andersen';
$lastSpace = strrpos($q, ' ');
$q1 = trim(substr($q, 0, $lastSpace));
$q2 = trim(substr($q, $lastSpace));
Avatar billede gigi1 Nybegynder
29. april 2013 - 17:04 #4
Tak for svar.

Kan dette laves mere simpelt?


if (!empty($_GET["q"]))
{
    $parts= explode(" ", $_GET["q"]);

    if (count($parts) == 1)
    {
        $sql = 'Select * FROM Person WHERE Firstname LIKE "%" . $array[0] ."%"';
   
    }
    elseif (count($parts) == 2)
    {
        $sql = 'Select * FROM Person WHERE Firstname LIKE "%" . $array[0] ."%" AND Lastname LIKE "%" . $array[1] ."%"';
   
    }
    elseif (count($parts) > 2)
    {
        $sql = 'Select * FROM Person WHERE Firstname LIKE "%" . array_pop($parts) ."%" AND Lastname LIKE "%" . implode(" ", $parts) ."%"';
   
    }

}
Avatar billede gigi1 Nybegynder
29. april 2013 - 17:11 #5
Hov $array skulle have været $parts
Avatar billede repox Seniormester
29. april 2013 - 18:03 #6
Du kan spare den midterste elseif ved at lave tredie id om til > 1.
Avatar billede gigi1 Nybegynder
29. april 2013 - 18:37 #7
Jeg takker.
Avatar billede gigi1 Nybegynder
02. maj 2013 - 16:33 #8
Har du også erfaring med SQL sætninger? Jeg får ikke det ønskede resultat med mine SQL sætninger.
Avatar billede repox Seniormester
02. maj 2013 - 16:39 #9
Jeg tænker du kan prøve at skifte dine AND ud med OR?
Avatar billede gigi1 Nybegynder
02. maj 2013 - 16:54 #10
Du får lige den opdaterede version.


$parts = explode(" ", $_GET["q"]);   
   
    if (count($parts) == 1)
    {
        $sql = 'SELECT TOP 5 Firstname, Lastname FROM Persons WHERE Firstname LIKE ?';
        $params = array($parts[0] . '%');
    }
   
    elseif (count($parts) > 1)
    {
        $lastname =  array_pop($parts);
        $firstname = implode(" ", $parts);
        $sql = 'SELECT TOP 5 Firstname, Lastname FROM Persons WHERE Firstname LIKE ? AND Surname LIKE ?';
        $params = array($firstname . '%', $lastname . '%');
    }


Jeg har personen Anders A Andersen i tabellen "persons".
I firstname kolonnen står der: Anders A
I Lastname kolonnen står der: Andersen

Jeg kunne godt tænke mig af finde ham via disse søgninger i en form:
Anders
A
Anders A Andersen
Anders Andersen
Anders A
Avatar billede gigi1 Nybegynder
02. maj 2013 - 16:55 #11
*Surname skulle have været Lastname
Avatar billede michael_stim Ekspert
03. maj 2013 - 09:10 #12
Det havde været bedre at lave et andet tabeldesign. Men du skal i hvert fald have % med i dine $params og så bruge OR i stedet for AND.

$params = array('%'. $firstname . '%','%'. $lastname . '%');
Tænk på at den laver en full table scan med %, til sidst, tror jeg det er.

$sql = 'SELECT TOP 5 Firstname, Lastname FROM Persons WHERE Firstname LIKE ? OR Lastname LIKE ?';


Tror ikke du kan bruge TOP i MySQL, der skal du bruge LIMIT
Avatar billede gigi1 Nybegynder
03. maj 2013 - 19:37 #13
Kan jeg gøre noget ved at jeg kun får det ønskede resultat på Anders A Andersen når jeg søger på: Anders A[mellemrum]

jeg er nød til at tilføje et mellemrum til sidst når jeg søger på fornavn mellemnavn

Jeg bruger TOP fordi at jeg bruger MSSQL
Avatar billede michael_stim Ekspert
03. maj 2013 - 20:10 #14
Kig på funktionerne RTRIM (right) og LTRIM (left)
Avatar billede gigi1 Nybegynder
03. maj 2013 - 22:11 #15
Men den tror jo at A'et (mellemnavnet) er efternavnet
Avatar billede gigi1 Nybegynder
07. maj 2013 - 16:30 #16
nogle ideer?
Avatar billede michael_stim Ekspert
08. maj 2013 - 09:32 #17
Så må du jo fortælle den HVAD den skal lede efter og HVOR den skal lede. En computer kan ikke tænke selv.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester