2016-08-21 3 views
1

ich mit einem Problem nicht bin, habe ich einige Werte aus einer MySQL-Abfrage geholt und sie in ein Array wie folgt:Comma Separated, wenn der Wert in Array leer ist

$add1 = $location->address1; 
$add2 = $location->address2; 
$twn = $location->town; 
$pcode = $location->postcode; 
$latitude = $location->lat; 
$longitude = $location->lng; 

$fullAddress = [$add1, $add2, $twn, $pcode]; 

$string = rtrim(implode(',', $fullAddress), ','); 

echo $string; 

so, dass ich aus Echo eine Benutzeradresse. Das Problem, das ich bin immer ist, dass selbst wenn einer dieser Werte nicht existiert (und einige nicht, weil sie nicht alle erforderlichen Felder sind), wird das Komma noch auf dem Bildschirm angezeigt, wie:

add1,, town, br2 5lp 

, weil es ist ein leerer Wert in der Datenbank.

Was ich erreichen möchte ist so etwas wie:

add1, town, br2 5lp 

, wenn der zweite Teil der Adresse fehlt.

Kann mir jemand helfen, das herauszufinden?

+1

replace '' 'mit', 'mit' str_replace() '? – frz3993

Antwort

1
The problem I am getting is that even if one of these values does not 
exist (and some dont because they are not all required fields), 
the comma is still echoed to the screen 

Das ist, was die implode Funktion in php tun soll. Wenn Sie ein anderes Verhalten wünschen, müssen Sie entweder die Art ändern, in der Sie Ihre CSV-Zeichenkette erstellen, oder die Informationen, die Sie von der Implodefunktion erhalten, zusätzlich bearbeiten.

Verwenden Sie also eine for-Schleife oder eine foreach-Schleife, um durch das Adressfeld zu gehen. Eine for-Schleife ist schneller als eine foreach-Schleife.

Mit Foreach:

$add1 = $location->address1; 
$add2 = $location->address2; 
$twn = $location->town; 
$pcode = $location->postcode; 
$latitude = $location->lat; 
$longitude = $location->lng; 

$fullAddress = [$add1, $add2, $twn, $pcode]; 

$string = ""; 
foreach($fullAddress as $value) 
{ 
    if(!empty($value)) 
      $string .= $value.", "; 
} 

$string = rtrim($string, ", "); 

echo $string; 

Sie können auf der csv Zeichenfolge Ihrer eigenen Lösung einige zusätzliche Verarbeitung tun, indem sie vielleicht eine str_replace() aller Vorkommen von ,, mit , tun. Dies könnte gefährlich sein, denn wenn einer der Werte in Ihrem $ fullAddress-Array einen als gültigen String enthält, wird dieser auch durch , ersetzt.

2

versuchen Sie dies.

$fullAddress = [$add1, $add2, $twn, $pcode]; 
$string = implode(',', array_filter($fullAddress, 'strlen')); 
echo $string; 
+1

Nur 'array_filter ($ fullAddress)' wird tun. –

0

Was Sie brauchen, ist, um sicherzustellen, Array $fullAddress keinen leeren Wert haben, so PHP eingebaute Funktion array_filter machen diesen Zweck sehr einfach.

Ändern Sie einfach Ihre letzte Codes:

$string = implode(',', array_filter($fullAddress)); 
echo $string; 

Wenn der zweite Parameter von array_filter nicht angegeben wird, werden alle Einträge des Arrays gleich FALSCH entfernt werden. Verwenden Sie einfach array_filter($fullAddress), um den Code klarer und einfacher zu machen.

Verwandte Themen