Php Symfony2-正在重写的数组

Php Symfony2-正在重写的数组,php,arrays,symfony,Php,Arrays,Symfony,我对数组有点小问题。我本质上声明了一个数组 public function getAvailabilityData(){ $alerts = $this->em->getRepository('NickAlertBundle:AvailabilityAlert')->getActiveAlertIds(); $alertsArray = array(); if (!$alerts) { throw $this->createNo

我对数组有点小问题。我本质上声明了一个数组

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_转储告诉我所有的数据都在那里。结果是这样的

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_转储创建最后一个对象,看起来它覆盖了其他2个对象

现在,这与我使用的普通PHP版本完全相同,唯一的区别是我使用的不是foreach循环

while ($aRow = $availabilitySql->fetch(PDO::FETCH_ASSOC)) {
那么,为什么每次都要覆盖我的数组创建


谢谢

我看不出$alertId是在哪里定义的,以及下一行应该如何更改它。我认为这只是没有改变你一直使用同一排


您还需要检查if(empty($alerts[$alertId]),但是数组被称为$alertsArray,所以我认为您的意思是if(empty($alertsArray[$alertId])。

什么
var\u dump($alertAvailability);
说?ps.:对于这种“数据结构”,对象可能更好第二:哪里定义了
$alertId
?对不起,我已经用整个函数更新了我的问题。变量转储可以在我的第二个代码块中看到。第三个代码块是1行的正确数据,但它应该对所有3行都这样做。这就是为什么它很奇怪,它在我的旧代码中工作,所以不确定它为什么不工作RewVar_dump对应于什么?我已经在问题中添加了var_dump,它是$alertAvailability的var_dump。作为更新,如果我在创建第五维后添加var_dump,我可以看到所有3位数据都被输出。因此我认为这肯定是一个覆盖的情况。如果你不知道这么重要的事情,这不应该是答案只是一个评论。