【问题标题】:Checking the value of all a loops value检查所有循环值的值
【发布时间】:2010-02-02 12:09:45
【问题描述】:

我在 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>

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

【问题讨论】:

  • 你为什么要跳进跳出这么多 PHP 代码?如果您只是将一小部分 HTML 包含到您的 PHP 字符串中,或​​者预先计算值而不是内联进行计算,那么它的可读性会大大提高。
  • 或者,我的偏好是反过来:将&lt;a href='#'...&lt;tr bgcolor 字符串踢到主要内容中。无论哪种方式,您都需要在输出到 HTML 的任何文本内容上调用 htmlspecialchars,否则您会遇到 XSS 漏洞。

标签: php loops foreach


【解决方案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... 
}

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

【讨论】:

    【解决方案2】:

    在下面试试我的代码:

    <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 检查浏览器中的结果,以查看页面结构是否像您想要的那样,所有标签是否平衡并在正确的位置关闭。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-27
      • 2013-05-19
      • 2016-11-07
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多