使用usort()
,是否可以对也包含整数值的字符串进行排序?
例如,采用包含电子邮件地址(和其他数据)的对象数组 -
$invitees = Array(
[0] => Array(
'email' => 'test11@testing.com'
),
[1] => Array(
'email' => 'test2@testing.com'
),
[2] => Array(
'email' => 'test1@testing.com'
)
);
使用以下代码将数组元素作为一个简单的字符串进行比较 -
/** Sort the data (if the sort key is defined) */
if(!empty($_REQUEST['orderby'])) :
usort($emails, array(&$this, '_order_callback'));
endif;
function _order_callback($item_a, $item_b){
/** Grab 'orderby', which must have been set for this function to be called */
$orderby = $_REQUEST['orderby'];
/** If no 'order' is not set, default to ASC */
$order = (!empty($_REQUEST['order'])) ? $_REQUEST['order'] : 'ASC';
$result = strcmp($item_a[$orderby], $item_b[$orderby]);
return (strtoupper($order) === 'ASC') ? $result : -$result; //Send final sort direction to usort
}
结果按以下顺序交付 -
[0] - 'test11@testing.com'
[2] - 'test1@testing.com'
[1] - 'test2@testing.com'
我想要这个订单的地方 -
[2] - 'test1@testing.com'
[1] - 'test2@testing.com'
[0] - 'test11@testing.com'
这可能usort()
吗?谢谢。
编辑
现在我知道存在natsort()
(感谢以下评论/答案),我能够找到并尝试这个 -
$result = ($item_a[$orderby] > $item_b[$orderby] ? 1 : ($item_a[$orderby] < $item_b[$orderby] ? -1 : 0));
我将该比较添加到我的_order_callback()
函数(if $orderby === email
)中,它很接近,但按 order 排序11, 12, 13, 14, 1, 2, 3, 4
。