首页 > 解决方案 > Sort Array by Number and Boolean

问题描述

I have an array, every item has a number from 1-10, and every item has boolean value.

I want to sort it, so every item with boolean is in the first part of the array, but it should also be sort by number

Example. This is simplified the initial Array

Item1: Number 3, Boolean false Item2: Number 8, Boolean true Item3: Number 4, Boolean false Item4: Number 2, Boolean true

This Array Should look like this Item2: Number 8, Boolean true Item4: Number 2, Boolean true Item3: Number 4, Boolean false Item1: Number 3, Boolean false

I already got this function

$refarr = array_sort($refarr, 'refweights', SORT_DESC);

which sort the Array like this Item2: Number 8, Boolean true Item3: Number 4, Boolean false Item1: Number 3, Boolean false Item3: Number 2, Boolean true

Is there any other way to archive what i than to split the initial Array into two Arrays (Boolean True and false), sort this by number, and bring them back together?

标签: phpsorting

解决方案


与自定义排序一起使用usort...

<?php

$arr = array(
    array(2, false),
    array(2, true),
    array(3, false),
    array(8, true),
    array(4, false),
    );

usort($arr, function ($a, $b){
    if ($a[0] === $b[0]) {
        return 0;
    }
    return ($a[0] < $b[0]) ? 1 : -1;
});
usort($arr, function ($a, $b){
    if ($a[1] === $b[1]) {
        return 0;
    }
    return ($a[1] < $b[1]) ? 1 : -1;
});
print_r($arr);

输出:


Array
(
    [0] => Array
        (
            [0] => 8
            [1] => 1
        )

    [1] => Array
        (
            [0] => 2
            [1] => 1
        )

    [2] => Array
        (
            [0] => 4
            [1] => 
        )

    [3] => Array
        (
            [0] => 3
            [1] => 
        )

    [4] => Array
        (
            [0] => 2
            [1] => 
        )

)

参考:https ://www.php.net/manual/en/function.usort.php


推荐阅读