通过单独数组的元素对一个数组的元素进行分组和汇总

问题描述 投票:0回答:0

我是 PHP 的新手,需要完成一些我认为很简单的事情。寻找指点。

我将 MODX 用作 CMS,虽然本文中有特定于 MODX 的参考资料,但此处描述的需求特定于 PHP。

我有一个自定义片段,它从指定资源中检索模板变量 ('pnl') 的值。我需要按每个资源的发布日期的月份对 pnl 进行分组和汇总(即,如果资源的发布日期 = 03/29/23,则其 PNL 值汇总在“2023 年 3 月”下,以及附加到具有的资源的所有其他值本月出版)。

代码片段将输出两个数组。第一个是分组 - 在本例中为月份(即 1 月 23 日、2 月 23 日等) - 必须按其汇总 pnl。第二个是 PNL 值(在这种情况下,按月汇总)。每个数组元素的位置相互关联。

以下汇总了从中检索 PNL 值的资源。我将此作为有关代码段功能的上下文。

//Parent ID of children that contain PNL values

$ids = $modx->getChildIds(6);

//Define criteria
$criteria = $modx->newQuery('modResource');

$criteria->where(array(
    'id:IN' => $ids,
    'published' => '1',
    'template' => '3'
));

$criteria->sortby('publishedon', 'ASC');

//Get objects using getCollection
$docs = $modx->getCollection('modResource', $criteria);

这部分组装数组:

//Loop through $docs for 'pnl'
foreach ($docs as $doc) {
    
    $pnl = $doc->getTVValue('pnl');
    $pnl_formatted = number_format($pnl, 2, '.', ', ');

// Get groupings (in this case 'month')
    $date = strtotime($doc->get('publishedon'));
    $month = date('F Y', $date);
    $months[]=$month;
    $months = array_unique($months);

// Get PNL
    if(!empty($pnl_formatted) && ($pnl_formatted !== '0.00')) {
        $values[] = $pnl_formatted;
    }
}

//create and format $values and $months arrays and send to placeholders
$modx->setPlaceholder('values',array_walk_recursive($values,function($pnl_formatted){echo"$pnl_formatted,";}));
$modx->setPlaceholder('groupings',array_walk_recursive($groupings,function($month){echo"$month,";}));

显然,$values[] 包含来自包含一个资源的每个实例的 pnl 值。我不确定如何从这个数组发展到按月汇总这些值的数组。我已经尝试使用 array_merge 和其他选项,但最终我错过了逻辑中的一个步骤。非常感谢任何指点。

最后,在格式化数组的最终语句中,输出包含一个“1”,我不确定为什么。我还需要从两个数组的最后一个数组元素中删除逗号。

php arrays modx-revolution
© www.soinside.com 2019 - 2024. All rights reserved.