将数组存储在数组

时间:2018-01-02 22:26:38

标签: php arrays symfony

我想显示按日期分组的公司的可用性。我有这些数据: 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

1 个答案:

答案 0 :(得分:0)

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

function makeGrid() {

$(".gridForm").submit(function(e) {
     e.preventDefault();

 x=$('#gridHeight').val(); // value of height
 y=$('#gridWidth').val();  // value of width


    for(i=0; x>i;x--){
        $('#pixels').append('<tr><td></td></tr>');
    }

    for(j=1; y>j ;y--){
        $('tr').append('<td></td>');
    }   

});

}

makeGrid();

输出:

<?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";