Avatar billede Mik2000 Professor
16. oktober 2020 - 16:01 Der er 2 kommentarer og
1 løsning

Navn, adresse, postnr by i en sætning fra database hvor nogle kan være tomme

Jeg har tit et dumt lille "problem" som jeg tænkte I måske kender en løsning på

Vi har en tabel
id, navn, adresse, postnr, by

Jeg henter det ud, og har brug for at få output sådan her
navn - adresse, postnr, by

Men nogle gange kan felter være tomme
Det kan resulterer i
navn - adresse, , by
- adresse, , by
og lign.
hvis ikke man bruger noget if/else som også er bøvlet

Man kan flytte tegnet med ind i f.eks.
(!empty(navn)) ? navn." - " : "" ;
Men hvis så der kun er navn så slutter den med " - ", og på samme måde hvis der er navn og postnr så slutter den med ", "

Er der en nem måde at løse det på
Avatar billede arne_v Ekspert
16. oktober 2020 - 16:15 #1
Der er vel kun to tilgange.

1) erstatte en tom værdi med en placeholder
2) kun skrive komma hvis der er en værdi
Avatar billede Mik2000 Professor
16. oktober 2020 - 19:51 #2
Hvordan i praksis
I eksempel siger vi database værdier er hentet ud i variabler, så vi har værdierne fra databasen i $navn $adresse $postnr $by

// Hvis det sættes efter
echo (!empty($navn)) ? $navn." - " : "" ;
// Problemet er så hvis resten ikke er udfyldt, så er der en " - " til sidst

Så begynder det at blive en masse if/else

// Hvis det sættes før
echo (!empty($adresse)) ? " - ".$adresse : "" ;
// Problemet er så hvis navn ikke er udfyldt, så er der en " - " i starten

Men måske er der ingen smart løsning på det - tænkte bare der måtte være andre der oplevede noget lign.
Avatar billede arne_v Ekspert
16. oktober 2020 - 20:25 #3
Jeg tænker:


<?php

define('ASIS', 1);
define('REPLACE', 2);
define('SKIP', 3);

function dump($navn, $vej, $by, $strategy = ASIS, $replacement = '') {
    switch($strategy) {
        case ASIS:
            echo "$navn,$vej,$by\r\n";
            break;
        case REPLACE:
            if(empty($navn)) $navn = $replacement;
            if(empty($vej)) $vej = $replacement;
            if(empty($by)) $by = $replacement;
            echo "$navn,$vej,$by\r\n";
            break;
        case SKIP:
            $line = '';
            if(strlen($line) > 0 && !empty($navn)) $line = $line . ',';
            $line = $line . $navn;
            if(strlen($line) > 0 && !empty($vej)) $line = $line . ',';
            $line = $line . $vej;
            if(strlen($line) > 0 && !empty($by)) $line = $line . ',';
            $line = $line . $by;
            echo "$line\r\n";
            break;
    }
}

echo "ASIS:\r\n";
dump('navn','vej','by');
dump('navn','vej','');
dump('navn','','by');
dump('','vej','by');
dump('navn','','');
dump('','vej','');
dump('','','by');

echo "REPLACE:\r\n";
dump('navn', 'vej', 'by', REPLACE, '?');
dump('navn', 'vej', '', REPLACE, '?');
dump('navn', '', 'by', REPLACE, '?');
dump('', 'vej', 'by', REPLACE, '?');
dump('navn','','', REPLACE, '?');
dump('','vej','', REPLACE, '?');
dump('','','by', REPLACE, '?');

echo "SKIP:\r\n";
dump('navn', 'vej', 'by', SKIP);
dump('navn', 'vej', '', SKIP);
dump('navn', '', 'by', SKIP);
dump('', 'vej', 'by', SKIP);
dump('navn','','', SKIP);
dump('','vej','', SKIP);
dump('','','by', SKIP);

?>



ASIS:
navn,vej,by
navn,vej,
navn,,by
,vej,by
navn,,
,vej,
,,by
REPLACE:
navn,vej,by
navn,vej,?
navn,?,by
?,vej,by
navn,?,?
?,vej,?
?,?,by
SKIP:
navn,vej,by
navn,vej
navn,by
vej,by
navn
vej
by
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

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