удалить повторяющиеся столбцы при печати в цикле - PullRequest
0 голосов
/ 27 ноября 2009

Я использую приведенный ниже код для печати из массива, но он печатает слишком много столбцов, потому что я использую цикл foreach ...

Как я могу распечатать только 1 столбец 1 и 1 столбец 2, но при этом сохранить правильные строки для печати, которая работает?

<div class="feature-text">
<?php 
//Now print the associated cms_page_parts
$qpp = $conn->query("SELECT * FROM cms_page_part WHERE page_id=$id"); 
$rpp = $qpp->fetchAll(PDO::FETCH_ASSOC);

foreach ($rpp as $row) {
?>
  <div id="col1">
    <p><?php echo $row['name']=='body' ? $row['content_html'] : NULL; ?></p>
  </div>
  <div id="col2">
    <p class="testimonial"><?php echo $row['name']=='sidebar' ? $row['content_html'] : NULL; ?></p>
  </div>
<?php 
}
?>
</div>

Ответы [ 6 ]

1 голос
/ 27 ноября 2009

На каждой итерации цикла вы печатаете два div, когда я подозреваю, что вам нужен только один. Как об этом вместо этого:

foreach ($rpp as $row) {
    if ($row['name'] == 'body') {
        echo '<div id="col1">'
             . '<p>' . $row['content_html'] . '</p>'
             . '</div>';
    } else {
        echo '<div id="col2">'
             . '<p class="testimonial">' . $row['content_html'] . '</p>'
             . '</div>';
    }
}
0 голосов
/ 27 ноября 2009

Если я правильно понимаю проблему, что-то вроде этого должно работать:

<div class="feature-text">
    <?php 
    //Now print the associated cms_page_parts
    $qpp = $conn->query("SELECT * FROM cms_page_part WHERE page_id=$id"); 
    $rpp = $qpp->fetchAll(PDO::FETCH_ASSOC);

    $col1 = "";
    $col2 = "";
    foreach ($rpp as $row) {
        $col1 .= '<p>'.($row['name']=='body' ? $row['content_html'] : NULL).'</p>';
        $col2 .= '<p class="testimonial">'.($row['name']=='sidebar' ? $row['content_html'] : NULL).'</p>';
    }
    ?>
    <div id="col1">
        <?php echo $col1 ?>
    </div>
    <div id="col2">
       <?php echo $col2 ?>
    </div>
</div>
0 голосов
/ 27 ноября 2009

если вы ограничите свой запрос до 2 и вытащите только body и sidbar, вы будете смеяться:

SELECT * FROM cms_page_part WHERE page_id=$id AND (name ='body' OR name='sidebar' ) LIMIT 2
0 голосов
/ 27 ноября 2009
foreach ($rpp as $row) {
    if ($row['name'] == 'body') {
        echo '<div id="col1">';
        echo '<p>' . $row['content_html'] . '</p>'
        echo '</div>';
    } else if ($row['name'] == 'sidebar')  {
        echo '<div id="col2">';
        echo '<p class="testimonial">' . $row['content_html'] . '</p>';
        echo '</div>';
    }
}

? Будет проще, если вы поставите образец входных данных и нужный результат;)

0 голосов
/ 27 ноября 2009

Вы можете ограничить свой запрос, чтобы он возвращал только 2 строки с предложением LIMIT 0, 2.

Или вы можете использовать простой счетчик внутри цикла:

$counter = 0;
foreach ($rpp as $row) {
   if ($counter < 2) {
?>
  <div id="col1">
    <p><?php echo $row['name']=='body' ? $row['content_html'] : NULL; ?></p>
  </div>
  <div id="col2">
    <p class="testimonial"><?php echo $row['name']=='sidebar' ? $row['content_html'] : NULL; ?></p>
  </div>
<?php 
  $counter++;
  }
else
    break;
}
0 голосов
/ 27 ноября 2009

break завершает выполнение тока для структуры foreach, while, do-while или switch. http://php.net/manual/en/control-structures.break.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...