2

对不起,如果这真的很基础,但我只是在学习 PHP。

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

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

即从数据库中返回,例如:55, main street, townname

当地址不包含街道名称时,它会返回例如:55, , townname。

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

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

非常感谢

4

7 回答 7

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);
于 2012-04-12T19:15:49.113 回答
2

代替

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

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

旧代码输出街道名称后跟逗号,新代码检查街道名称是否超过 0 个字符,如果是则仅输出。

于 2012-04-12T19:14:36.557 回答
2

您可以使用内联条件,试试这个:

<?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><?php echo($h4); ?></h4>
于 2012-04-12T19:17:09.490 回答
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>';
于 2012-04-12T19:16:07.113 回答
1

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

代码将如下所示:

<h4>
<?=!empty($prop['house_number']) ? $prop['house_number'].', ' : ''?>
<?=!empty($prop['street']) ? $prop['street'].', ' : ''?>
<?=!empty($prop['town']) ? $prop['town'].', ' : ''?>
</h4>
于 2012-04-12T19:16:45.230 回答
1

建议你习惯于数组函数,并内爆;假设您的 $prop 数组如下所示:

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

您可以过滤数组并使用 implode:

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- 绕过所有空。

于 2012-04-12T19:19:52.567 回答
0

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

例子:

<?php $str = $prop['house_number']  . ',' . $prop['street'] . ',' . $prop['town']?> ;?>
<h4><?=str_replace(',,','',$str);?></h4>
于 2012-04-13T02:01:59.960 回答