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位数据都被输出。因此我认为这肯定是一个覆盖的情况。如果你不知道这么重要的事情,这不应该是答案只是一个评论。