Как я могу отобразить ту же запись даты через цикл foreach из базы данных в PHP

#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>