2015-02-23 5 views
-1

У меня небольшая проблема с массивом. Я принципиально объявляю массивSymfony2 - Массив переопределяется

public function getAvailabilityData(){ 
    $alerts = $this->em->getRepository('NickAlertBundle:AvailabilityAlert')->getActiveAlertIds(); 

    $alertsArray = array(); 

    if (!$alerts) { 
     throw $this->createNotFoundException('Unable to find Availability.'); 
    } 

    foreach($alerts as $alert){ 
     $alertId = (int)$alert['id']; 
     $alertsArray[$alertId] = array(); 

     $allAvailability = $this->em->getRepository('NickAlertBundle:AvailabilityAlertAvailability')->getAlertAvailability($alertId); 

     foreach($allAvailability as $alertAvailability) 
     { 
      var_dump($alertAvailability); 
      $dateString = $alertAvailability['lastUpdated']; 
      $dateString = $dateString->format('d M Y H:00'); 

      // Create the second dimension of the array, using the alert pseudo as the key. 
      if (empty($alerts[$alertId][$alertAvailability['alertPseudo']])) { 
       $alertsArray[$alertId][$alertAvailability['alertPseudo']] = array(); 
      } 

      // Create the third dimension of the array, using the flight number as the key. 
      if (empty($alerts[$alertId][$alertAvailability['alertPseudo']][$alertAvailability['flightNumber']])) { 
       $alertsArray[$alertId][$alertAvailability['alertPseudo']][$alertAvailability['flightNumber']] = array(); 
      } 

      // Create the fourth dimension of the array, using the date string as the key. 
      if (empty($alerts[$alertId][$alertAvailability['alertPseudo']][$alertAvailability['flightNumber']][$dateString])) { 
       $alertsArray[$alertId][$alertAvailability['alertPseudo']][$alertAvailability['flightNumber']][$dateString] = array(); 
      } 

      // Create the fifth dimension of the array, using the class letter as a key, and the availability value as the value. 
      $alertsArray[$alertId][$alertAvailability['alertPseudo']][$alertAvailability['flightNumber']][$dateString][$alertAvailability['classLetter']] = $alertAvailability['availability']; 
     } 
    } 

    var_dump($alertsArray); 
    return $alertsArray; 
} 

Теперь, когда первый var_dump показывает мне, что все данные есть. Получается вот так

array(5) { 
    ["availability"]=> string(1) "9" 
     ["lastUpdated"]=> object(DateTime)#378 (3) { 
      ["date"]=> string(19) "2015-02-22 14:28:58" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/London" 
     } 
     ["classLetter"]=> string(1) "C" 
     ["alertPseudo"]=> string(3) "123" 
     ["flightNumber"]=> string(3) "VS7" 
} 

array(5) { 
    ["availability"]=> string(1) "9" 
     ["lastUpdated"]=> object(DateTime)#369 (3) { 
      ["date"]=> string(19) "2015-02-22 14:28:58" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/London" 
     } 
     ["classLetter"]=> string(1) "D" 
     ["alertPseudo"]=> string(3) "123" 
     ["flightNumber"]=> string(3) "VS7" 
} 

array(5) { 
    ["availability"]=> string(1) "9" 
     ["lastUpdated"]=> object(DateTime)#367 (3) { 
      ["date"]=> string(19) "2015-02-22 14:28:58" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/London" 
     } 
     ["classLetter"]=> string(1) "I" 
     ["alertPseudo"]=> string(3) "123" 
     ["flightNumber"]=> string(3) "VS7" 
} 

Теперь, когда я создаю мой массив, он должен создавать записи для каждого «строки», который выводится выше, в этом случае он должен делать 3. Однако, если выходной массив, Я получаю

array(1) { 
    [1]=> array(1) { 
     ["123"]=> array(1) { 
      ["VS7"]=> array(1) { 
       ["22 Feb 2015 14:00"]=> array(1) { 
        ["I"]=> string(1) "9" 
       } 
      } 
     } 
    } 
} 

так что только создание последнего объекта из моего var_dump, похоже, это переопределение другой 2.

Теперь это точно так же, как мой нормальный PHP версии я работаю, единственная разница в том, что вместо цикла foreach я делаю

while ($aRow = $availabilitySql->fetch(PDO::FETCH_ASSOC)) { 

Так почему же мое создание массива выше переопределения каждый раз?

Благодаря

+0

, что ' var_dump ($ alertAvailability); 'говорит? ps .: возможно, объект должен быть лучше для такого рода« структуры данных », чем массив. Второй: где определено' $ alertId'? – DonCallisto

+0

Извините, я обновил свой вопрос с помощью целая функция. var_dump можно увидеть в моем втором блоке кода. Третий блок кода - это правильные данные для 1 строки, но он должен делать это для всех 3. Вот почему это странно, он работает в моем старом коде, поэтому не знаю, почему он не работает здесь –

+0

Что такое var_dump соответствует? – DonCallisto

ответ

-1

Я не могу видеть, где $ alertId определяется и как оно должно быть изменено в последующих строках. Я думаю, что это просто не меняется. Вы используете ту же строку все время.

Также проверка, если (пустые ($ предупреждениями [$ alertId] ... но массив называется $ alertsArray, так что я думаю, вы имеете в виду, если (пусто ($ alertsArray [$ alertId] ...

+2

Если вы не знаете такую ​​важную вещь, это не должен быть ответом, а комментарием. – DonCallisto

Смежные вопросы