массивы — php mysql выводит месяцы и содержимое таблицы

Мне нужно составить список, который печатает месяцы, и если они оплачены или нет.

Итак, сначала я делаю массив с названиями месяцев:

$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>
';

Я не совсем уверен, как я могу это сделать?

Благодарю вас!

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>

Надеюсь, что это поможет!

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

По вопросам рекламы [email protected]