我可以使用RestfulService从RestAPI读取和显示数据,但无法按日期值对此数据进行分组。 我目前的代码工作正常
$myList = ArrayList::create();
foreach ($jsonData['list'] as $result) {
$myresult = $result;
$myList->push($myresult);
}
之前我在DataObject上使用过GroupedList :: create(),但是我如何在ArrayList中使用它。
e.g。当我在foreach中打印$ result时给出了
Array('Id' => '123', 'Title' => 'foo', 'Date' => '2018-01-16')
Array('Id' => '124', 'Title' => 'bar', 'Date' => '2018-01-16')
Array('Id' => '125', 'Title' => 'foo-bar', 'Date' => '2018-01-16')
我需要分组
newArray['2018-01-16'][0] = array(
Array('Id' => '123', 'Title' => 'foo', 'Date' => '2018-01-16'),
Array('Id' => '124', 'Title' => 'bar', 'Date' => '2018-01-16'),
Array('Id' => '125', 'Title' => 'foo-bar', 'Date' => '2018-01-16')
);
感谢。
答案 0 :(得分:2)
鉴于您的数据如下:
Array('Id' => '123', 'Title' => 'foo', 'Date' => '2018-01-16')
Array('Id' => '124', 'Title' => 'bar', 'Date' => '2018-01-16')
Array('Id' => '125', 'Title' => 'foo-bar', 'Date' => '2018-01-16')
正如Robbie Averill所说,你可以将它放在SilverStripe ArrayList中使用它。当ArrayList实现SS_List接口时,您可以将数据列表数据提供给GroupedList并按数据字段分组,在本例中为“Date”。在您的控制器中输入如下内容:
/**
* @return GroupedList
**/
public function getGroupedAPIData() {
$data = ....; //get your data...
$myList = ArrayList::create($data);
$groupedList = GroupedList::create($myList);
return $groupedList;
}
注意:此GroupedList对象现在不知道如何对数据进行分组,我们可以使用GroupedBy
方法在模板中对其进行配置。它返回另一个可以循环的List $Children
:
<% loop $GroupedAPIData.GroupedBy(Date) %>
<h3>$Date</h3>
<ul>
<% loop $Children %>
<li>$Title ($ID)</li>
<% end_loop %>
</ul>
<% end_loop %>
如果您需要更多关于通过API使用的数据的奇特逻辑,您可以使用自定义逻辑将您获得的数据转换为ViewableData的子类。
答案 1 :(得分:1)
感谢您提供示例数据。
您可以使用嵌套的ArrayLists实现此目的。这比仅使用PHP数组稍微复杂一点,但这是一个例子:
$myList = ArrayList::create();
foreach ($jsonData['list'] as $result) {
// Look for an existing holder list
if (!$myList->find('Date', $result['Date'])) {
// Create one
$myList->push([
'Date' => $result['Date'],
'List' => ArrayList::create(),
]);
}
// Get the list now that we know it's there
$subList = $myList->find('Date', $result['Date']);
// Push the current result record into the grouped list
$subList->List->push($result);
}
return $myList;
然后你可以在你的模板中循环:
<% loop $GetMyList %>
<h2>{$Date.XML}</h2>
<ul>
<% loop $List %>
<li id="{$Id.ATT}">{$Title.XML}</li>
<% end_loop %>
</ul>
<% end_loop %>