我有一些代码,我已经试过修改,以使阵列按字母顺序排序,我认为以下几点:添加字母排序
public function getOptions(array $aggs, $filterEmptyOptions = true)
应该是:
public function getOptions(array sort($aggs), $filterEmptyOptions = true)
但它不不工作,我应该在哪里添加sort()到数组中?
编辑:我想啤酒厂的名字按字母顺序排序
这是我的全部代码,如果它可以更容易?
class BreweryBoolMustFilter implements BoolFilterInterface
{
/**
* @param Query $query
* @param Query\BoolQuery $bool
* @param Request $request
* @param array $filters
*/
public function __construct(Query $query, Query\BoolQuery $bool, Request $request, array &$filters)
{
if ($request->query->has('brewery') && (int) $request->query->get('brewery'))
{
$filters['brewery'] = (int) $request->query->get('brewery');
$bool->addMust(new Query\Term(['breweryId' => $filters['brewery']]));
}
$aggs3 = new Terms('breweries');
$aggs3->setField('breweryId');
$aggs3->setSize(100);
$query->addAggregation($aggs3);
}
/**
* @param array $aggs
* @param bool $filterEmptyOptions
*
* @return array
*/
public function getOptions(array $aggs, $filterEmptyOptions = true)
{
$breweriesObjects = (new BreweryQuery)->find();
$breweries = [];
foreach ($breweriesObjects as $breweryObject)
{
$breweries[$breweryObject->getId()] = [
'name' => $breweryObject->getName(),
'doc_count' => 0,
];
}
foreach ($aggs['breweries']['buckets'] as $bucket)
{
if (isset($breweries[$bucket['key']]))
{
$breweries[$bucket['key']]['doc_count'] = $bucket['doc_count'];
}
}
if (true === $filterEmptyOptions)
{
foreach ($breweries as $key => $brewery)
{
if (0 == $brewery['doc_count'])
{
unset($breweries[$key]);
}
}
}
return $breweries;
}
你不把函数调用一个函数,你把它放在函数体中。 – Barmar
查看大量有关排序数组信息的重复问题。然后用它在每个元素中用'name'值对'$ breweries'进行排序。 – Barmar
@Barmar不是重复的,因为问题的主要问题不仅仅是排序,而且还在另一个参数的内部运行函数,所以我建议您重新考虑 – calexandre