是否有一个循环,当变量为空时回显到php中的网页时会排除变量?

问题描述 投票:1回答:2

我从mysql数据库中提取信息作为关联数组。如果没有信息(即电话号码或第二地址线),则一些变量将为NULL。我提取信息并将其回显到网页就好了。但是,持有返回Null的位置有一个空白。我想删除那些为NULL的记录的空白。

我试图创建一个foreach语句循环遍历数组,但它连续14次重复记录,一次不包括一个变量。

例:

一个数据库有10列:

    id = auto increment 
    fname
    lname
    address1
    address2 = NULL
    city
    state
    zip
    officephone = NULL
    mobilephone = NULL

类::成员();

运行我的PDO后,我开始一个while循环并创建数组$ member:

   while($return = $stmt->fetch(PDO::FETCH_ASSOC)) {

        $member = array(
              $return['fname'],
              $return['lname'],
              $return['address1'],
              $return['address2'],
              $return['city'],
              $return['state'],
              $return['zip'],
              $return['ophone'],
              $return['mphone']);

我用html和css样式回复这个网页

      echo 

          $member[1] . $member[2].'<br />' .
          $member[3] . '<br />'.
          $member[4] . '<br />'.
          $member[5] . ', ' . $member[6].$member[7].'<br />'.
          $member[8] . '<br />' .
          $member[9] . '<br />'.

网页上的内容是什么样的

实例化 - 这将贯穿记录,直到结束然后停止。

    <?php $abs = array(Class::members()); foreach($mbs as $mb) { echo $mb;}?>

你看到什么了

    John Smith
    222 One Drive
                   (GAP BECAUSE NULL)
    Somewhere, USA 00000
                   (GAP BECAUSE NULL)
    555555555

我想写一些PHP代码,当它是NULL时跳过上面的GAP,但是当它不是NULL时包括它。

它看起来像:

    John Smith
    222 One Drive
    Somewhere, USA 00000
    555555555

我已经尝试创建一个方法来循环结果并跳过NULL变量但没有成功。

    foreach($member as $key => $value)

    /* variants I have tried in if() statment ($value != NULL), 
    ($value === NULL),($value == 'NULL'), ($value == ""), 
    (empty($value)), ($member[$value] == NULL)*/

    if($value == NULL) {
    continue; }
    }

这会返回每条记录的14个相同结果,并且所有记录都有差距。我也尝试使用array_filter($ members)。

有什么建议?

php arrays loops
2个回答
1
投票

只是在不需要时不输出<BR>

$output = $member[1] . $member[2];
$output.= ($output!='' ? '<br/>' : '') . $member[3];
$output.= ($output!='' ? '<br/>' : '') . $member[4];
$output.= ($output!='' ? '<br/>' : '') . $member[5];
$output.= ($output!='' AND ($member[6]!='' OR $member[7]!='') ? ', ' : '') . $member[6] . $member[7];
$output.= ($output!='' ? '<br/>' : '') . $member[8];
$output.= ($output!='' ? '<br/>' : '') . $member[9];
echo $output;

UPDATE (11 April 2019)

我认为这是您挑战的更好解决方案:

$output = $member[1] . $member[2];
$output.= ($output!='' ? "\n" : '') . $member[3];
$output.= ($output!='' ? "\n" : '') . $member[4];
$output.= ($output!='' ? "\n" : '') . $member[5];
$output.= ($output!='' AND ($member[6]!='' OR $member[7]!='') ? ', ' : '') . $member[6] . $member[7];
$output.= ($output!='' ? "\n" : '') . $member[8];
$output.= ($output!='' ? "\n" : '') . $member[9];

// we replace multiple NewLines with a single NewLine
$output = preg_replace('/\n+/', "\n", $output);
// we trim our string to remove the NewLines on left and write, if any
$output = trim($output);
// we then simply replace all NewLines with <BR>
echo nl2br($output);

0
投票

试试array_filter()从你的$member数组中移除Null,就像这样 -

$member = array_filter($member);

如果存在,它将从您的数组值中删除布尔值false,null,''SEE。如果要限制值,可以使用任何回调函数。

© www.soinside.com 2019 - 2024. All rights reserved.