foreach()一次又一次地执行同一行

时间:2013-10-26 22:57:06

标签: php

我有一个sql字段,我们的值就像

1,2,3,4,5,6-

如果获取这些值并将其分解为

$amenities = 1,2,3,4,5,6
$amenities_check = explode( "," , $amenities );

然后我运行一个foreach循环

<?php
$i = 1;
foreach($amenities_check as $amenities_conf)
{
    if( $amenities_conf != "" && $amenities_conf == 6)
    {
    ?>
        <li class="available_amen">Smoking Allowed</li>
    <?php
    }
    else
    {
    ?>
        <li class="not_amen">Smoking Allowed</li>
    <?php
    }
    if ($i++ == 1) break;
}
?>

现在问题是这个循环显示相同的行6次并且当它满足数据中的6位时显示正确的li类如果我应用$ i ++它只检查数据集中的第一个数据。

任何帮助foreach寻找所需的值,如1 2 3,并根据它执行功能..

谢谢

2 个答案:

答案 0 :(得分:0)

这是你在找什么?

<?php
foreach($amenities_check as $amenities_conf) {
  if ($amenities_conf == 6) {
    ?>
    <li class="available_amen">Smoking Allowed</li>
    <?php
  }
  else {
    ?>
    <li class="not_amen">Smoking Allowed</li>
    <?php
  }
}
?>

编辑:

<?php
foreach($amenities_check as $amenities_conf) {
  if ($amenities_conf == 6) {
    ?>
    <li class="available_amen">Smoking Allowed</li>
    <?php
  }
}
?>
    <li class="not_amen">Smoking Allowed</li>

或者像上面说的那样,使用in_array()。

<?php
if (in_array("6", $amenities_check)) {
  ?>
  <li class="available_amen">Smoking Allowed</li>
  <?php
}
?>
<li class="not_amen">Smoking Allowed</li>

答案 1 :(得分:0)

从评论中,你真正想知道的是数组中是否有6个,所以你不想在循环中输出任何东西。最简单的方法是使用相当不言自明的in_array function;就这么简单:

if( in_array('6', $amenities_conf) )
{
?>
    <li class="available_amen">Smoking Allowed</li>
<?php
}
else
{
?>
    <li class="not_amen">Smoking Allowed</li>
<?php
}

或者,通过循环数据库结果并基于它准备结构化数据,将逻辑与显示分开。对于这个例子,下面可能是过度杀戮,但显示了一般方法:

// While retrieving data from the DB
$amenity_names = array(
     1 => 'pets',
     // ...
     6 => 'smoking'
);
$included_amenities = array();
$amenities_check = explode( "," , $amenities );
foreach ( $amenities_check as $amenity )
{
     $name = $amenity_names[$amenity];
     $included_amenities[$name] = true;
}

// In the View / template code
if( $included_amenities[['smoking'] )
{
?>
    <li class="available_amen">Smoking Allowed</li>
<?php
}
else
{
?>
    <li class="not_amen">Smoking Allowed</li>
<?php
}