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小时以上"
}
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 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元以上
)
3个月前
charliecen

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

3个月前

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

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

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

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

3个月前

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!