PHP 数组排序(复杂字符串)
由于数组中包含数字
,特殊字符
,中文
等,所以自然排序就无法使用。这里用自定义办法
// 数组
$arr1 = ['1000-2000元', '1000元以下', '8000元以上', '5001-8000元', '2001-3000元', '3001-5000元'];
$arr2 = ['3小时以上', '1小时以内', '1-3小时'];
// 排序方法
function array_asort(&$array) {
if (!isset($array) || !is_array($array)) {
return false;
}
$real_arr = [
'1000元以下' => '0-999元',
'1小时以内' => '0-1小时',
];
foreach ($array as $k => $v) {
if (in_array($v, array_keys($real_arr))) {
$array[$k] = $real_arr[$v];
} else {
$array[$k] = $v;
}
}
asort($array);
foreach ($array as $k => $v) {
if (in_array($v, array_values($real_arr))) {
$newArr = array_flip($real_arr); // 数组键值翻转
$array[$k] = $newArr[$v];
} else {
$array[$k] = $v;
}
}
return true;
}
// 方法
array_asort($arr1);
array_asort($arr2);
echo '<pre>';
var_dump($arr1);
var_dump($arr2);
// 结果
array(6) {
[1]=>
string(13) "1000元以下"
[0]=>
string(12) "1000-2000元"
[4]=>
string(12) "2001-3000元"
[5]=>
string(12) "3001-5000元"
[3]=>
string(12) "5001-8000元"
[2]=>
string(13) "8000元以上"
}
array(3) {
[1]=>
string(13) "1小时以内"
[2]=>
string(9) "1-3小时"
[0]=>
string(13) "3小时以上"
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
asort是根据字符串第一个数字排序的
@lovecn asort对原数组排序不正确,所以要替换之后排序,再替换会原数组
$collection = collect([
['name' => 'Desk', 'price' => 200],
['name' => 'Chair', 'price' => 100],
['name' => 'Bookcase', 'price' => 150],
]);
$sorted = $collection->sortBy('price');
$sorted->values()->all();
collect做数组的一些操作很方便