【问题标题】:php mysql print months and table contentphp mysql 打印月份和表格内容
【发布时间】:2014-10-01 16:19:51
【问题描述】:

我需要制作一个打印月份以及是否已付款的列表。

所以首先我创建了一个包含月份名称的数组:

$month_names = array("January","February","March","April","May","June","July","August","September","October","November","December");

然后我有十二个月的列:值 1 表示付费 0 表示未付费。所以我做了一个变量来知道它是否被支付:

if ($row['month1'] == '1') {
    $row['month1'] = 'Paid';
} else $row['month1'] = 'Non-Paid';

有没有更好的方法来做到这一点?

该列表将只有两列:“每月付款”和“状态”。

while 或 foreach 应该是这样的:

echo '
    <li><a class="months">'$array[$month_names]=>$value'</a></li>
    <li><a class="status">'.$row['month1'].'</a></li>
    ';

我不太确定,我该怎么做?

谢谢!

【问题讨论】:

    标签: php arrays printing prepared-statement


    【解决方案1】:

    如果我没听错的话,你有一个这样的数组:

    $rows = array(
        array('month' => 1, 'paid' => 0),
        array('month' => 2, 'paid' => 1),
        array('month' => 4, 'paid' => 0),
        array('month' => 5, 'paid' => 1),
        array('month' => 7, 'paid' => 1),
        array('month' => 8, 'paid' => 0),
    );
    

    在这种情况下,你可以这样做

    <ul class="rows">
        <?php foreach ($rows as $row): ?>
            <li><a href="#" class="month"><?php echo $month_names[$row['month']] ?></a></li>
            <li><a href="#" class="status"><?php echo $row['paid'] ? 'Paid' : 'Non-Paid' ?></a></li>
        <?php endforeach ?>
    </ul>
    

    那会很理想,但我注意到您的示例数组有一个 month1 键,所以如果您的数组具有这种结构:month[0-9] = paid-status:

    $rows = array(
        'month1' => 0,
        'month2' => 1,
        'month4' => 0,
        'month5' => 1,
        'month7' => 1,
        'month8' => 0,
    );
    

    那么你应该这样做:

    <ul class="rows">
        <?php foreach ($rows as $month => $status): ?>
            <!-- We replace all non-numeric caracters in the key of the element and then sustract one to match the zero base index -->
            <li><a href="#" class="month"><?php echo $month_names[ preg_replace('/[^0-9]/', '', $month) - 1 ] ?></a></li>
            <li><a href="#" class="status"><?php echo $status ? 'Paid' : 'Non-Paid' ?></a></li>
        <?php endforeach ?>
    </ul>
    

    【讨论】:

      【解决方案2】:

      您在正确的轨道上保持逻辑与演示文稿分开。这是一件好事。对于您的问题,您可以检查所有月份值并将结果存储在另一个数组中(我们称之为$paid),按月份编号进行索引。然后使用$monthNames 数组映射到$paid 中的相应值。这将设置您循环遍历 $monthNames 数组并创建您的 HTML。

      以下内容将满足您的需求:

      <?php
      
      $monthNames = array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November","December");
      $paid = array(); //Placeholder for paid months.
      $row = $result->fetch_array();  //Assuming MySQLi API (you are using that or PDO...I hope...)
      
      for($i = 1; $i < 13; $i++) {
          $month = "month" . $i;
          if($row[$month] == 1) {
              $paid[] = "Paid";
          } else {
              $paid[] = "Not Paid";
          }
      }
      
      //Now make the HTML list
      
      print("<ul>\n");
      foreach($monthNames as $key => $month) {
          print('<li><a class="months">' . $month . '</a></li>' . "\n");
          print('<li><a class="status">' . $paid[$key] .'</a></li>' . "\n");
      }
      print("</ul>");
      
      ?>
      

      输出将沿线(取决于数据库数据):

      <ul>
      <li><a class="months">January</a></li>
      <li><a class="status">Paid</a></li>
      <li><a class="months">February</a></li>
      <li><a class="status">Paid</a></li>
      <li><a class="months">March</a></li>
      <li><a class="status">Not Paid</a></li>
      <li><a class="months">April</a></li>
      <li><a class="status">Paid</a></li>
      <li><a class="months">May</a></li>
      <li><a class="status">Paid</a></li>
      <li><a class="months">June</a></li>
      <li><a class="status">Paid</a></li>
      <li><a class="months">July</a></li>
      <li><a class="status">Paid</a></li>
      <li><a class="months">August</a></li>
      <li><a class="status">Not Paid</a></li>
      <li><a class="months">September</a></li>
      <li><a class="status">Paid</a></li>
      <li><a class="months">October</a></li>
      <li><a class="status">Paid</a></li>
      <li><a class="months">November</a></li>
      <li><a class="status">Not Paid</a></li>
      <li><a class="months">December</a></li>
      <li><a class="status">Paid</a></li>
      </ul>
      

      希望有所帮助!

      【讨论】:

      • 哇!谢谢! ofc 它有帮助! :) 嗯,使用 printf 和 echo 有什么区别吗?我实际上在使用 echo 因为它是我知道的,最好使用 printf?
      • @ChazyChaz printprintf 没有任何问题。如果有的话,printf 函数在处理字符串中的变量时会更好,因为您可以更好地控制格式。对于带有一个或两个变量的基本字符串 print 可以正常工作。
      • 好的,谢谢,我会更改打印的回声。感谢您的提示:)
      • @ChazyChaz 没问题。对于它的价值,使用echo 也没有任何问题,我只是更喜欢printprintf 我的字符串:) 有关回声与打印主题的更多信息,请参阅SO post
      • 我可以随意添加更多带有 $variables 的列而不会出现问题吗?如果语句已经选择了表。
      猜你喜欢
      • 2016-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-24
      相关资源
      最近更新 更多