数组:
$students = array(
array(
'id' => 2130,
'new_xuezhe_name' => '黄灿',
'new_xuezhe_country' => '中国'
),
array(
'id' => 2107,
'new_xuezhe_name' => '陈劲',
'new_xuezhe_country' => '中国'
),
array(
'id' => 2125,
'new_xuezhe_name' => 'Mats Magnusson',
'new_xuezhe_country' => 'Sweden',
'new_xuezhe_title' => 'Professor and Vice Head of School'
),
array(
'id' => 2110,
'new_xuezhe_name' => 'John Bessant',
'new_xuezhe_country' => 'England'
)
);
需求: 根据 new_xuezhe_name 这个key 使中文排在前面,英文排在后面,并且使中文按照abc 这样排序,比如上面的数组, 陈劲应该在前面黄灿在后面。
处理方法:
// 自定义排序函数
function sortStudentsByName($a, $b) {
// 提取名字
$nameA = $a['new_xuezhe_name'];
$nameB = $b['new_xuezhe_name'];
// 检查名字是否为中文
$isChineseA = preg_match('/[\x{4e00}-\x{9fa5}]/u', $nameA);
$isChineseB = preg_match('/[\x{4e00}-\x{9fa5}]/u', $nameB);
// 如果两个都是中文,按字母顺序比较
if ($isChineseA && $isChineseB) {
return strcmp($nameA, $nameB);
}
// 如果一个中文一个非中文,中文排在前面
elseif ($isChineseA) {
return -1;
}
elseif ($isChineseB) {
return 1;
}
// 如果两个都不是中文,也按字母顺序比较
else {
return strcmp($nameA, $nameB);
}
}
// 使用usort进行排序
usort($students, 'sortStudentsByName');
// 输出排序后的数组
echo '<pre>';
print_r($students);
结果如下:
Array
(
[0] => Array
(
[id] => 2107
[new_xuezhe_name] => 陈劲
[new_xuezhe_country] => 中国
)
[1] => Array
(
[id] => 2130
[new_xuezhe_name] => 黄灿
[new_xuezhe_country] => 中国
)
[2] => Array
(
[id] => 2110
[new_xuezhe_name] => John Bessant
[new_xuezhe_country] => England
)
[3] => Array
(
[id] => 2125
[new_xuezhe_name] => Mats Magnusson
[new_xuezhe_country] => Sweden
[new_xuezhe_title] => Professor and Vice Head of School
)
)