将数组存储在数组中

问题描述 投票:-1回答:1

我想显示按日期分组的公司的可用性。我有这些数据:entity "Disponibilite"

这里有一个我想要显示的例子:enter image description here

我在这里:enter image description here

在这里我的代码。我在评论中一步一步地解释了它。对于恢复它:对于每个可用性,我检查日期是否已经在我的日期列表中(谁包含可用性)。如果我没有找到它,我会添加一天,如果我的日期列表和我添加一个数组。同时我在同一个数组中添加当前可用性的小时数。

如果我找到它,我只在子数组中添加小时(索引:0)。

有没有更好的方法来每天分组我的“小时”?

foreach($entreprises as $entreprise)
                {
                    // Array of days
                    $Disponibilites = array();
                  //  Array of day who contains availabilities. 
                    $JourneesDisponibles=array('nomJourDispo'=>'test1','jourDispo'=>'test2','moisDispo'=>'test3','jourMoisDispo'=>'test4');
                    $j=0;
                            foreach($entreprise[0]->getPropose() as $dispos)
                            {
                                // For each availability, I store its time, day and month
                                $jourDispo = new \DateTime();

                                $dateDispo = $dispos->getDateDispo(); // The whole date : YYYY-MM-DD HH:MM:SS
                                $nomJourDispo = $dispos->getJourDispo(); //  Day , ex : Lundi (monday)
                                $jourDispo = $dateDispo->format('d'); // Day, ex : 22
                                $moisDispo = $dispos->getMoisDispo(); // month
                                $heureDispo = $dateDispo->format('H:i'); //Hour
                                $jourMoisDispo = $jourDispo.$moisDispo; //Day + Month = unique in the year

                               // if(($JourneesDisponibles['jourMoisDispo']) != null)
                               for($j = 0; $j < count($JourneesDisponibles);++$j)
                               {
                                  // Here I'm looking for the day - If it not exists, I add it in the list of days. 
                                   if($JourneesDisponibles['jourMoisDispo'] != $jourMoisDispo){
                                    $JourneesDisponibles['nomJourDispo']=$nomJourDispo;
                                    $JourneesDisponibles['jourDispo']=$jourDispo;
                                    $JourneesDisponibles['moisDispo']=$moisDispo;
                                    $JourneesDisponibles['jourMoisDispo']=$jourMoisDispo;
                                    // Here I add an array to the array (index : 0) who contains the hour of the availability
                                    array_push($JourneesDisponibles,array($heureDispo)); 

                                   }
                                  else
                                  {
                                    // Else, If the day already exists, I add the hour of the availability in the day.
                                      array_push($JourneesDisponibles[0],($heureDispo));
                                  }

                               }

                                //Here I add the day of availabilities in the list of availabilities
                                array_push($Disponibilites,$JourneesDisponibles); 
                            } 
                        // Here I associate the company with its availabilities     
                        array_push($entreprises[$i],$Disponibilites); 
                        $i++;
                }

    // I return all objects I need 
      return $this->render('CalandmeBundle:Default:recherche.html.twig',array('adresse' => $adresse,'latitude'=>$latitude,
      'longitude'=>$longitude,'entreprises'=>$entreprises));

我尝试了这个,但我得到一个未定义的偏移量错误(0):

                       for($j = 0; $j < count($JourneesDisponibles);++$j)
                       {
                          // Here I'm looking for the day - If it not exists, I add it in the list of 
                           if($JourneesDisponibles[$j]['jourMoisDispo'] != $jourMoisDispo){
                            $JourneesDisponibles[$j]['nomJourDispo']=$nomJourDispo;
                            $JourneesDisponibles[$j]['jourDispo']=$jourDispo;
                            $JourneesDisponibles[$j]['moisDispo']=$moisDispo;
                            $JourneesDisponibles[$j]['jourMoisDispo']=$jourMoisDispo;
                            // Here I add an array to the array (index : 0) who contains the hour of the availability
                            array_push($JourneesDisponibles[$j],array($heureDispo)); 

                           }
                          else
                          {
                            // Else, If the day is recognized, I add the hour of the availability in the day.
                              array_push($JourneesDisponibles[$j][0],($heureDispo));
                          }
                           array_push($Disponibilites,$JourneesDisponibles[$j]); 
                       }

编辑:我添加一个新的数组,但条件不起作用

foreach($entreprises as $entreprise)
                {
                    // Array of availabilities
                    $Disponibilites = array();
                  //  Array of day who contains availabilities. 
                    $JourneesDisponibles=array(array('nomJourDispo'=>'','jourDispo'=>'','moisDispo'=>'','jourMoisDispo'=>''));
                  //  $Journee= array();
                    $j=0;
                            foreach($entreprise[0]->getPropose() as $dispos)
                            {
                                // For each availability, I store its time, day and month
                                $jourDispo = new \DateTime();

                                $dateDispo = $dispos->getDateDispo(); // The whole date : YYYY-MM-DD HH:MM:SS
                                $nomJourDispo = $dispos->getJourDispo(); //  Day , ex : Lundi (monday)
                                $jourDispo = $dateDispo->format('d'); // Day, ex : 22
                                $moisDispo = $dispos->getMoisDispo(); // month
                                $heureDispo = $dateDispo->format('H:i'); //Hour
                                $jourMoisDispo = $jourDispo.$moisDispo; //Day + Month = unique in the year

                               // if(($JourneesDisponibles['jourMoisDispo']) != null)
                               for($j = 0; $j < count($JourneesDisponibles);++$j)
                               {
                                  // Here I'm looking for the day - If it not exists, I add it in the list of 
                                 // $key=0;

                                 //  var_dump(($JourneesDisponibles));
                                   if($JourneesDisponibles[$j]['nomJourDispo'] != $jourMoisDispo){
                                    $JourneesDisponibles[$j]['nomJourDispo']=$nomJourDispo;
                                    $JourneesDisponibles[$j]['jourDispo']=$jourDispo;
                                    $JourneesDisponibles[$j]['moisDispo']=$moisDispo;
                                    $JourneesDisponibles[$j]['jourMoisDispo']=$jourMoisDispo;
                                    // Here I add an array to the array (index : 0) who contains the hour of the availability
                                    array_push($JourneesDisponibles[$j],array($heureDispo)); 

                                   }
                                  else
                                  {
                                    // Else, If the day is recognized, I add the hour of the availability in the day.
                                      array_push($JourneesDisponibles[$j][0],($heureDispo));
                                  }
                                   array_push($Disponibilites,$JourneesDisponibles[$j]); 
                               }

                                //Here I add the day of availabilities in the list of availabilities

                            } 
                        // Here I associate the company with its availabilities     
                        array_push($entreprises[$i],$Disponibilites); 
                        $i++;
                }

我明白了,我该如何解决这个问题呢?

enter image description here

php arrays symfony
1个回答
0
投票

仅给出您的第一个列数据,您可以按日期对数组进行分块(将日期转换为时间戳),然后迭代它们并根据需要显示这些时间戳。这里有一个简单的显示示例:

<?php
$availabilities = 
    array (
        '18-01-04 09:00:00',
        '18-01-04 10:00:00',
        '18-01-04 11:00:00',
        '18-01-05 12:00:00',
        '18-01-05 13:00:00',
    );

$chunked_by_day = [];
foreach($availabilities as $availability)
    $chunked_by_day[date('Ymd', $ts = strtotime($availability))][] = $ts;

foreach($chunked_by_day as $day)
    echo
        date('D d M', $day[0])
    ,
        "\n"
    ,
        implode(' ', array_map(function($v) {
            return date('H:i', $v);
        }, $day))
    ,
        "\n";

输出:

Thu 04 Jan
09:00 10:00 11:00
Fri 05 Jan
12:00 13:00
© www.soinside.com 2019 - 2024. All rights reserved.