用PHP代码

时间:2015-10-23 14:53:52

标签: javascript php css

我需要在以下PHP代码中使用if条件隐藏表。我正在尝试使用CSS,但似乎CSS无法读取if条件,它总是运行和覆盖。我想实现它而不在if条件中使用表创建标记。感谢

<?php
$arr=array(array(1,2,3,4,5),array(6,7,8,9));
foreach ($arr as $val)
{
    echo '<table border="1" id="table1" align="center"   style="float:center;">';
    for($i=0;$i<sizeof($val);$i++)
    {
        echo '<tr><td>'.$val[$i].'</td></tr>';
        if($val[$i]>5)
        {?>
            <style>
            #table1 { visibility:hidden; }
            </style>
            <?php
        }
        else
        {?>
            <style>
            #table1 { visibility: visible !important;}
            </style>
            <?php
        }
    }
    echo'<br/>';
    echo '</table>';
}
?>

2 个答案:

答案 0 :(得分:0)

&#13;
&#13;
<?php
  $arr = array(array(1,2,3,4,5), array(6,7,8,9));
  $id = 1;
?>
<html>
<head>
  <style type="text/css">
    .hidden {
      visibility: hidden;
    }
  </style>
</head>
<body>

<?php
foreach($arr as $val) :
  for($i = 0; $i < sizeof($val); $i++) :
    if($val[$i] > 5) :
      $hidden = true;
    else :
      $hidden = false;
    endif;
  endfor;
  ?>
  
  <table border="1" id="table' . $id++ . '" align="center" class="<?php if($hidden) : ?>hidden<?php endif; ?>">
    <?php for($i = 0; $i < sizeof($val); $i++) : ?>
      <tr><td><?php echo $val[$i]; ?></td></tr>
    <?php endfor; ?>
   <br/>
  </table>
<?php endforeach; ?>

</body>
</html>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

我不完全确定我为什么试图回答这个问题。我甚至不确定你要隐藏哪张桌子。您也没有在一个表中的数据与应该根据该数据的值隐藏的表之间创建一个定义良好的关系。

您的内联CSS无法正常工作,因为您多次使用相同的ID。你做不到:

#table1 { visibility: hidden; }
#table1 { visibility: visible !important; }

浏览器会将最后一条规则应用于两个表。而是使用您在循环中生成的CSS类。

.table-0 { visibility: hidden; }
.table-1 { visibility: visible !important; }

这样的事情:

<?php

$arr = array( array( 1, 2, 3, 4, 5 ), array( 6, 7, 8, 9 ) );
$c   = 0;
foreach ( $arr as $val ) {

    $tClass = 'table-' . $c;

    echo '<table border="1" class="' . $tClass . '" align="center"   style="float:center;">';

    for ( $i=0; $i < sizeof( $val ); $i++ ) {

        echo '<tr><td>' . $val[ $i ] . '</td></tr>';

        if ( $val[ $i ] > 5 ) {            
            ?>
            <style>.table-0 { visibility:hidden; }</style>
            <?php
        }

    }

    echo '<br>';
    echo '</table>';

}

?>

虽然这会让你得到你想要的东西,但还有很多不足之处。主要不是在你注入CSS的地方 - 你将为第二个数组中的每个值输出<style>。此外,我非常确定<style>不是<table>的允许孩子,alignborder属性已弃用且没有float: center;。< / p>

我也想知道你是否打算使用visibility: hidden; vs display: none;

考虑沿着这些方向做一些事情,仍然可以使用一些改进,但更好。我们输出的<style>比我们需要的更多。

<?php

$arr    = array( array( 1, 2, 3, 4, 5 ), array( 6, 7, 8, 9 ) );
$c      = 0;
$toHide = '';

foreach ( $arr as $val ) {

    $tClass = 'table-' . $c;

    echo '<table border="1" class="' . $tClass . '">';

    for ( $i=0; $i < sizeof( $val ); $i++ ) {

        echo '<tr><td>' . $val[ $i ] . '</td></tr>';

        if ( $val[ $i ] > 6 ) {
            $toHide = $tClass;
        }

    }

    echo '<br>';
    echo '</table>';

}

echo '<style>.' . $toHide . ' { visibility: hidden; }</style>';

?>

一些改进可能是将$toHide转换为数组,并将每个类push转换为数组,然后如果必须处理多个类,则转换为implode