我是 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”,我不确定为什么。我还需要从两个数组的最后一个数组元素中删除逗号。