如果数组中的值为空,则以逗号分隔

时间:2016-08-21 08:25:53

标签: php

我遇到了问题,我从MySQL查询中获取了一些值并将它们放入一个数组中,如下所示:

$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;

这样我就可以回显出用户地址。我得到的问题是,即使其中一个值不存在(有些不是因为它们不是所有必需的字段),逗号仍然会回显到屏幕上:

add1,, town, br2 5lp 

因为数据库中有一个空值。

我想要达到的目标是:

add1, town, br2 5lp 

如果地址的第二部分丢失了。

任何人都可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:2)

试试这个。

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

答案 1 :(得分: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 

这就是php中的implode函数应该做的事情。如果您想要不同的行为,则必须更改创建CSV字符串的方式或对从内爆函数获取的信息执行一些额外处理。

因此使用for循环或foreach循环来遍历地址数组。 for循环比foreach循环更快。

使用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;

您可以对自己的解决方案的已创建的csv字符串执行一些额外的处理,方法是str_replace() ,,,的所有出现,,。这可能很危险,因为如果$ fullAddress数组中的任何值包含,作为有效字符串,那么它也将被CREATE TABLE dbo.CalcTimeDiff (Staffid INT ,Orderid INT ,Startingtime DateTime ,Endingtime Datetime ) GO INSERT INTO dbo.CalcTimeDiff SELECT '1','1','2016-08-21 11:30:00.000','2016-08-21 11:50:00.000' UNION SELECT '1','2','2016-08-21 11:55:00.000','2016-08-21 13:55:00.000' GO 替换。

答案 2 :(得分:0)

您需要确保数组$fullAddress没有空值,因此php内置函数array_filter可以很容易地实现此目的。

只需将您的上一个代码更改为:

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

如果未提供array_filter的第二个参数,则将删除所有等于FALSE的数组条目。因此,只需使用array_filter($fullAddress)即可使代码更清晰简单。