$data = array(
array('zz', 'name' => 'Jack', 'number' => 22, 'birthday' => '12/03/1980'),
array('xx', 'name' => 'Adam', 'number' => 16, 'birthday' => '12/03/1980'),
array('aa', 'name' => 'Paul', 'number' => 13, 'birthday' => '12/03/1980'),
array('cc', 'name' => 'Helen', 'number' => 44, 'birthday' => '24/06/1967'),
);
我想对上面的数组进行排序。
首先,我想按birthday
对数组进行排序。从那个birthday
我希望按number
排序数组。我不像这样输出数组,< / p>
$data = array(
array('cc', 'name' => 'Helen', 'number' => 44, 'birthday' => '24/06/1967'),
array('aa', 'name' => 'Paul', 'number' => 13, 'birthday' => '12/03/1980'),
array('xx', 'name' => 'Adam', 'number' => 16, 'birthday' => '12/03/1980'),
array('zz', 'name' => 'Jack', 'number' => 22, 'birthday' => '12/03/1980'),
);
从各种链接我得到了这个解决方案,这个解决方案不能正常工作,它只按数字排序值
usort($array, function($a, $b) {
$rdiff = $a->birthday - $b->birthday;
if ($rdiff) return $rdiff;
return $a->number - $b->number;
});
答案 0 :(得分:0)
问题是生日是一个字符串。您需要先使用strtotime
将其转换为整数。
$rdiff = strtotime($a->birthday) - strtotime($b->birthday);
由于这些日期是英国格式,您需要将d / m / y之间的斜杠更改为连字符,因为使用斜杠时strtotime期望日期为美国格式,即m / d / y 。从PHP手册:
m / d / y 或 dmy 格式的日期通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜杠(/),然后假设美国人 m / d / y ;而如果分隔符是破折号( - )或点(。),则假定为欧洲 d-m-y 格式。
所以使用:
$rdiff = strtotime(str_replace('/', '-', $a->birthday)) - strtotime(str_replace('/', '-', $b->birthday));