考虑以下多重排序方法。在这种情况下,我有一组具有特定开始日期的项目。示例数组显示:
0 -> array('title' => 'hello',
'attributes' => array('id' => 4, 'startdate' => '2013-06-11')),
1 -> array('title' => 'hello second entry',
'attributes' => array('id' => 6, 'startdate' => '2013-04-11'))
您可以看到第二个条目应该在第一个之前。目前无法使用我的调用,因为它只检查数组的深度 1。
$albums = $this->multiSort($items, "SORT_ASC", 'startdate', true);
如何修改此方法以对数组中的项目进行深度搜索的最佳方式。更好的是能够指定深度键。我想避免向该方法添加其他参数。
我可以像这样调用该方法,然后编写一个 for 循环来获取关键数据,但嵌套 for 循环不是我想做的事情。
$albums = $this->multiSort($items, "SORT_ASC", array('attributes', 'startdate') , true);
针对我的情况优化此方法的最佳方法是什么?
public function multiSort($data, $sortDirection, $field, $isDate) {
if(empty($data) || !is_array($data) || count($data) < 2) {
return $data;
}
foreach ($data as $key => $row) {
$orderByDate[$key] = ($isDate ? strtotime($row[$field]) : $row[$field]);
}
if($sortDirection == "SORT_DESC") {
array_multisort($orderByDate, SORT_DESC, $data);
} else {
array_multisort($orderByDate, SORT_ASC, $data);
}
return $data;
}