2012-04-12 97 views
2

对不起,如果这是非常基本的,但我只是学习PHP。在PHP中删除多个逗号

我有一些代码,看起来像:

<h4><?=$prop['house_number']?>, <?=$prop['street']?>, <?=$prop['town']?></h4> 

从数据库如带回:55,主要街道,townname

当地址不包含街道名称它回来如:55,镇名。

我想知道如何删除commer,所以它只会带回例如:55,townname。

希望这是一个非常容易的,但我已经尝试了几件事情,似乎无法做到正确。

非常感谢

回答

1

您可以使用三元运算符来检查每个var是否为空。看看http://davidwalsh.name/php-shorthand-if-else-ternary-operators

代码会再看看这样的:在使用

<?php 
    $house_num=($prop['house_number']) ? $prop['house_number'].',' : null; 
    $street=($prop['street']) ? $prop['street'].',' : null; 
    $town=($prop['town']) ? $prop['town'] : null; 
    $h4=$house.' '.$street.' '.$town; 
?> 

然后:

<h4> 
<?=!empty($prop['house_number']) ? $prop['house_number'].', ' : ''?> 
<?=!empty($prop['street']) ? $prop['street'].', ' : ''?> 
<?=!empty($prop['town']) ? $prop['town'].', ' : ''?> 
</h4> 
+0

工作就像一个魅力。我知道这很容易。非常感谢你! – LMR 2012-04-12 19:26:50

2

更换

<?=$prop['street']?>,

<?php if(strlen($prop['street'] > 0) echo $prop['street'] . ", "; ?>

旧代码输出的街道名称,后跟一个逗号,新的代码检查,如果街道名长于0个字符,并且只有在输出时才会输出。

3

使用数组来保存值,并implode()

事情是这样的:

$result = array(); 

if (!empty($prop['house_number']) 
    $result[] = $prop['house_number']; 

if (!empty($prop['street']) 
    $result[] = $prop['street']; 

if (!empty($prop['town']) 
    $result[] = $prop['town']; 

$result = implode(',',$result); 
1

您可以修复你的输出以后:

ob_start(); 
?> 
<h4><?=$prop['house_number']?>, <?=$prop['street']?>, <?=$prop['town']?></h4> 
<?php 
echo strtr(ob_end_clean(), ', , ', ', '); 

但实际上有百种方式解决它,这只是一个。

echo '<h4>' , implode(', ', array_filter(
     array($prop['house_number'], $prop['street'], $prop['town']), 'strlen') 
    ), '</h4>'; 
2

您可以使用内嵌条件语句,尝试这种

<h4><?php echo($h4); ?></h4> 
+0

这会给一个额外的尾随逗号 – xbonez 2012-04-13 14:51:21

+0

只需删除最后一个逗号,我更新了代码。 – faino 2012-04-13 16:06:41

1

建议你习惯数组函数和implode;假设你的$支柱阵列看起来像这样:

$prop = array(
    "house_number" => 55, 
    "street" => "", 
    "town" => "Houston" 
); 

您可以过滤阵列和使用破灭:

function filter_empty($a) { 
    if(strlen(trim($a)) > 0) return(true); 
    return(false); 
} 

$filtered = array_filter($prop, 'filter_empty'); 

从上面,阵列将是这样的:

print_r($filtered); 
/* 
Array 
(
    [house_number] => 55 
    [town] => Houston 
) 
*/ 

人类可读的文本行很容易:echo implode(", ", $filtered);

将输出类似55, Houston - 绕过所有空容器。

0

这只是另一种方式,您可以将地址字符串保存在一个变量中,并用一个逗号替换双逗号[,,]。类似于hakre正在消耗的想法。

实施例:

<?php $str = $prop['house_number'] . ',' . $prop['street'] . ',' . $prop['town']?> ;?> 
<h4><?=str_replace(',,','',$str);?></h4>