检查所有循环值的值

时间:2010-02-02 12:09:45

标签: php loops foreach

我在PHP中有这个循环回显了一个结果表,

<table cellspacing="0" cellpadding="3">
  <tr>
    <td><b>Content Image Title</b></td>
    <td><b>Content Image Type</b></td>
    <td><b>Headline Image</b></td>
    <td><b>Content Image Belongs To</b></td>
    <td><b>Date Created</b></td>
    <!--<td><b>Uploaded By</b></td>-->

  </tr>
  <?php $colours = array("#f9f9f9", "#f3f3f3"); $count = 0;?>
  <?php foreach ($allContentImages as $contentImages) : ?>
    <tr bgcolor="<?php echo $colours[$count++ % count($colours)];?>">
      <td><?php echo "<a href='#' class='screenshot' rel='/media/uploads/$contentImages[categoryId]/$contentImages[contentImageName]'>".$contentImages['contentImageName']; ?></td>
      <td><?php echo $contentImages['contentImageType']; ?></td>
      <td><?php if($contentImages['isHeadlineImage'] == 1){ echo "Y";}else{echo "N";} ?></td>
      <td><?php echo $contentImages['contentTitle'] ?></td>
      <td><?php echo date("d-m-Y", $contentImages['contentImageDateUploaded']); ?></td>
      <td align="left"><a class="delete" href="<?php echo base_url();?>dashboard/deleteContentImage/<?php echo $contentImages['contentImageId'];?>"><img src="/media/images/icons/cancel.png" alt="Delete A Category"/></a></td>
    </tr>
  <?php
    if($contentImages['isHeadlineImage'] == '0') {
        echo "<tr bgcolor='red'>";
        echo "<td><p>You need to assign a headline image</p></td>";
        echo "</tr>";

  ?>
  <?php endforeach; ?>
</table>

我需要检查每个内容片段是否与标题图像具有相同的标题,如果没有,则回显一个红色的新行...但是每次有图像时我得到的都是新行不是标题图片。谁能帮我?我不介意使用javascript,如果这有助于匹配td的值?但显然我的尝试不正确。

2 个答案:

答案 0 :(得分:1)

听起来你想要做的事情必须预先计算,因为foreach循环无法知道未来的内容。

在你的foreach陈述之前可能是这样的:

$contentHasHeadlineImage = array();
foreach ($allContentImages as $contentImages) {
  if ( $contentImages['isHeadlineImage'] == 1)
    $contentHasHeadlineImage[ $contentImages['contentTitle'] ] = true;
}

然后你可以使用

if (array_key_exists($contentImages['contentTitle'], $contentHasHeadlineImage)) {
  // Has headline image... 
}

验证某个标题是否有标题。

答案 1 :(得分:0)

请尝试下面的代码:

<table cellspacing="0" cellpadding="3">
  <tr>
    <td><b>Content Image Title</b></td>
    <td><b>Content Image Type</b></td>
    <td><b>Headline Image</b></td>
    <td><b>Content Image Belongs To</b></td>
    <td><b>Date Created</b></td>
    <td>Action</td>
  </tr>
  <?php
  $colours = array("#f9f9f9", "#f3f3f3");
  $num_colours = count($colours);
  $i = 0;
  ?>
  <?php foreach ($allContentImages as $row) : ?>
    <tr bgcolor="<?php echo $colours[($i++) % $num_colours]; ?>">
      <td><a href="#" class="screenshot"
             rel="/media/uploads/<?php echo $row['categoryId']; ?>/<?php echo $row['contentImageName']; ?>">
        <?php echo $row['contentImageName']; ?>
      </a></td>
      <td><?php echo $row['contentImageType']; ?></td>
      <td><?php echo $row['isHeadlineImage'] == 1 ? "Y" : "N"; ?></td>
      <td><?php echo $row['contentTitle']; ?></td>
      <td><?php echo date("d-m-Y", $row['contentImageDateUploaded']); ?></td>
      <td align="left"><a class="delete"
                          href="<?php echo base_url(); ?>dashboard/deleteContentImage/<?php echo $row['contentImageId'];?>">
        <img src="/media/images/icons/cancel.png" alt="Delete A Category" />
      </a></td>
    </tr>
    <?php if ( $row['isHeadlineImage'] == 0 ): ?>
      <tr bgcolor="red">
        <td colspan="6"><p>You need to assign a headline image</p></td>
      </tr>
    <?php endif; ?>
  <?php endforeach; ?>
</table>

在整理代码时,我在第一列中找到了未关闭的a href。对于特殊的额外行,我添加了colspan。我假设$row['isHeadlineImage']的值只有1或0(整数或布尔值)。

我还发现你在不使用引用的情况下访问数组键。它可能成为未来的潜在错误。

在整齐的缩进中编写代码并在使用块时保持一致或回显php变量将帮助您快速找到错误。此外,使用firefox中的Firebug或Safari和Google Chrome中的Web Inspector在浏览器中检查结果,以查看页面结构是否与您想要的一样,所有标记均衡并在正确的位置关闭。