获取带有键和值的数组作为我在 DQL 中的选择属性



我正在使用DQL进行查询

$query = $this->createQueryBuilder('i')
->select('(i.sortiesNoSortie)','COUNT(i.participantsNoParticipant)')
->groupBy('i.sortiesNoSortie');

$result = $query->getQuery()->getArrayResult();

但我得到了这个

array:3 [
0 => array:2 [
1 => "76"
2 => "1"
]
1 => array:2 [
1 => "82"
2 => "1"
]
2 => array:2 [
1 => "83"
2 => "1"
]
]

我想在一个简单的数组中获取它,其中包含我选择的键和值

76 => 1
82 => 1
83 => 1 

这可能吗?

出于显而易见的原因,结果是一个 2D 数组,因为它表示执行查询时将收到的行和列。从我的头顶上看,没有一个教义提供的功能来将其转换为您想要的格式。

但是,您可以使用 PHP 为您重新格式化数组。

$result = $this->createQueryBuilder('i')
->select('(i.sortiesNoSortie)','COUNT(i.participantsNoParticipant)')
->groupBy('i.sortiesNoSortie')
->getQuery()
->getArrayResult();
$output = array();
foreach($result as $row) {
$output[$row[0]] = $row[1];
}

虽然乍一看这并不理想,但实际上,如果教义要实现某些东西以您想要的方式格式化它,它很可能会做类似的事情,并把它包装在一个适合你的函数中。

话虽如此,除了 foreach 循环之外,可能还有更好的方法来使用 PHP 处理数据。无论哪种方式,在从教义中获取数据后,都不要完全回避在 PHP 中重新格式化数据。显然,这将是一个个案的事情,但似乎您正在处理少量数据,因此额外的处理不会成为问题。


编辑

谢谢@Matteo提醒我。 array_column是可用于替换 foreach 循环的函数。

$output = array_column($result, 1, 0);

最新更新