Мне нужно составить список, который печатает месяцы, и если они оплачены или нет.
Итак, сначала я делаю массив с названиями месяцев:
$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>
';
Я не совсем уверен, как я могу это сделать?
Благодарю вас!
Вы на правильном пути, отделяя свою логику от презентации. Это хорошая вещь. Для вашей проблемы вы можете проверить все значения вашего месяца и сохранить результаты в другом массиве (назовем его $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>
Надеюсь, что это поможет!
Если я вас правильно понял, у вас есть такой массив:
$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>