我有一个预订系统,用于预订这种形式的阵列:
array(6) {
[0]=> array(5) {
["date"]=> string(10) "08/12/2016"
["start"]=> string(5) "15:00"
["end"]=> string(5) "16:00"
["booked_by"]=> string(5) "mark"
["id"]=> string(1) "4"
}
我使用此函数按日期对其进行排序,并将所有预订放入数组中:
function getBooking($aula) {
global $client;
$keys = $client->keys("Calendar:aula$aula:*");
$booking = array();
foreach ($keys as $key => $value) {
$result = $client->hGetAll($value);
array_push($booking, $result);
}
usort($booking, function($a1, $a2) {
$v1 = strtotime(str_replace("/", "-", $a1['data']));
$v2 = strtotime(str_replace("/", "-", $a2['data']));
return $v1 - $v2; // $v2 - $v1 to reverse direction
});
return $booking;
}
我还需要通过“开始”键对其进行排序,以便在日历中显示它们。我尝试添加另一个usort但它不起作用。如果您需要更多信息,请给我回信 在此先感谢您的帮助
答案 0 :(得分:2)
正如@ Don's Panic所说,如果您可以将数据作为数据库请求的一部分进行排序。
否则,如果您按原样坚持使用数组 - 您可以从date
和start
字符串中提取数据,按正确顺序排列,然后在strcmp()
时使用usort($booking, function($a, $b) {
// extract year, month and day from date
list($a_month, $a_day, $a_year) = explode('/', $a['date']);
list($b_month, $b_day, $b_year) = explode('/', $b['date']);
// compare the correctly ordered strings
return strcmp($a_year.$a_month.$a_day.$a['start'], $b_year.$b_month.$b_day.$b['start']);
});
你排序。例如,
strcmp()
如果某些代码不熟悉,请参考
list()
http://php.net/manual/en/function.strcmp.php
var Child = React.createClass({
render: function() {
return(
<tr>
<td colSpan="8"> I am a child that can be hidden!</td>
</tr>
)
}
})
var CreateRows = React.createClass({
getInitialState: function() {
return {childVisible: true}
},
render: function(){
var rows = this.props.people.map(function(row, i){
return (
<tr key={i} onClick={this.onClick}>
<td>{row['id']}</td>
</tr>
{
this.state.childVisible
? <Child />
: null
}
)
})
return (
<tbody>
{rows}
</tbody>
)
},
onClick: function(){
this.setState({childVisible: !this.setstate.childVisible})
}
});
http://php.net/manual/en/function.list.php
答案 1 :(得分:0)
@Steve解决方案很棒。但您也可以使用array_multisort
和array_column
:
array_multisort(
array_map('strtotime', array_column($booking, 'date')),
array_column($booking, 'start'),
$booking
);
这是working demo。
虽然在这种特殊情况下它并不是最佳的,但在您需要时,例如,按date
升序排序,但按start
降序或其他方式排序可能更合适。
尽管如此,这些操作最好在数据库内完成。
修改强>
正如@ Don's Panic在评论中所说,由于格式的原因,按日期排序可能很棘手。为了弥补这一点,我们可以array_map
'date'
列strtotime
。