#php #arrays #loops #date #foreach
#php #массивы #циклы #Дата #foreach
Вопрос:
Я хочу отобразить ту же запись даты из базы данных, используя цикл foreach.
Предположим, у меня есть записи ниже в базе данных.
Id Name created_date
1 XYZ 2020-12-08 13:24:20
2 YUZ 2020-12-04 11:40:04
3 TYZ 2020-12-03 11:54:58
4 SDD 2020-12-03 07:19:19
В приведенной выше таблице есть 2 записи с той же датой « 2020-12-03
, поэтому я хочу отобразить ту же запись даты, что и в приведенном ниже формате в таблице.
Tuesday
- 2020-12-08
Friday
- 2020-12-04
Thursday
- 2020-12-03
- 2020-12-03
Я использовал приведенный ниже PHP-скрипт, но он мне не нужен, он отображает только отдельные 2 строки с той же датой.
<table>
<?
if(isset($getUsers) amp;amp; !empty($getUsers)){
foreach ($getUsers as $key => $value) {
$date =$value['created_date'];
$day ='';
Switch(date('w',strtotime($date))){
Case 0:
$day= 'Sunday';
break;
Case 1:
$day= 'Monday';
break;
Case 2:
$day= 'Tuesday';
break;
Case 3:
$day= 'Wednesday';
break;
Case 4:
$day= 'Thursday';
break;
Case 5:
$day= 'Friday';
break;
default:
$day= 'Saturday';
}
?>
<thead>
<tr >
<th scope="col" colspan="4"><?php echo $day; ?></th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row" colspan="4"><?php echo date('Y-m-d', strtotime($value['created_date'])) .'-'. $value['name']; ?></th>
</tr>
</tbody>
<?php
}
}
?>
</table>
Комментарии:
1. Почему вы хотите сделать это в коде? Вы можете расширить свой запрос, чтобы указать день недели и отсортировать по нему.
2. @MarkusZeller, я уже извлекаю запись еженедельно через запрос к БД, и теперь мне нужна только запись с той же датой, из которой я извлекал еженедельные данные из БД
3. Что вы пытались правильно сгруппировать данные?
Ответ №1:
Вы должны сопоставить свои дни с соответствующими данными примерно так:
$daysMap = [];
foreach ($getUsers as $key => $value) {
$date =$value['created_date'];
$day ='';
Switch(date('w',strtotime($date))){
Case 0:
$day= 'Sunday';
break;
Case 1:
$day= 'Monday';
break;
...
}
$daysMap[$day][] = date('Y-m-d', strtotime($value['created_date'])) .'-'. $value['name'];
}
Позже повторите цикл $daysMap
и распечатайте каждый день с его датами внутри.
Ответ №2:
Я бы использовал отдельный цикл и создал массив, используя день в качестве ключа :
<table>
<?
if(isset($getUsers) amp;amp; !empty($getUsers)){
// first create the array to ensure the order of days will be respected
$days = [
'Sunday' => [],
'Monday' => [],
'Tuesday' => [],
'Wednesday' => [],
'Thursday' => [],
'Friday' => [],
'Saturday' => []
];
// add the datas in the corresponding day in the array
foreach ($getUsers as $value) {
$date =$value['created_date'];
$dayOfWeek = date('w',strtotime($date));
$days[$dayOfWeek][] = $value;
}
// loop the array and display its content
foreach ($days as $day => $values) {
?>
<thead>
<tr >
<th scope="col" colspan="4"><?php echo $day; ?></th>
</tr>
</thead>
<tbody>
<?php
// Loop the sub array containing the values
foreach ($values as $value) {
?>
<tr>
<th scope="row" colspan="4"><?php echo date('Y-m-d', strtotime($value['created_date'])) .'-'. $value['name']; ?></th>
</tr>
<?php
}
?>
</tbody>
<?php
}
}
?>
</table>