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 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 3

asort是根据字符串第一个数字排序的

Array
(
    [0] => 1000-2000元
    [1] => 0-999元
    [2] => 8000元以上
    [3] => 5001-8000元
    [4] => 2501-3000元
    [5] => 3001-5000元
)
Array
(
    [1] => 0-999元
    [0] => 1000-2000元
    [4] => 2501-3000元
    [5] => 3001-5000元
    [3] => 5001-8000元
    [2] => 8000元以上
)
5年前 评论

@lovecn asort对原数组排序不正确,所以要替换之后排序,再替换会原数组

5年前 评论

$collection = collect([
['name' => 'Desk', 'price' => 200],
['name' => 'Chair', 'price' => 100],
['name' => 'Bookcase', 'price' => 150],
]);

$sorted = $collection->sortBy('price');

$sorted->values()->all();

collect做数组的一些操作很方便

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
39
粉丝
9
喜欢
71
收藏
102
排名:461
访问:1.9 万
私信
所有博文
社区赞助商