使用字符串值自定义数组排序

Nic*_* S. 4 php arrays sorting

假设我有这个数组:

$array = array(
    array("id" => 7867867, "animal" => "Dog"),
    array("id" => 3452342, "animal" => "Lion"),
    array("id" => 1231233, "animal" => "Lion"),
    array("id" => 5867867, "animal" => "Dog"),
    array("id" => 1111111, "animal" => "Zeebra"),
    array("id" => 2222222, "animal" => "Cat"),
    array("id" => 3333333, "animal" => "Cat"),
    array("id" => 4444444, "animal" => "Zeebra")
);
Run Code Online (Sandbox Code Playgroud)

现在我一直在尝试做的是使用php排序函数,以便能够根据特定规则对其进行排序(不是按字母顺序)

客户希望这些信息按"Lion first,Dog second,Zeebra third,Cat 4th"排序.

像这样的东西:

$array = array(
    array("id" => 3452342, "animal" => "Lion"),
    array("id" => 1231233, "animal" => "Lion"),
    array("id" => 7867867, "animal" => "Dog"),
    array("id" => 5867867, "animal" => "Dog"),
    array("id" => 4444444, "animal" => "Zeebra"),
    array("id" => 1111111, "animal" => "Zeebra"),
    array("id" => 2222222, "animal" => "Cat"),
    array("id" => 3333333, "animal" => "Cat"),
);
Run Code Online (Sandbox Code Playgroud)

该阵列将使用"动物"值进行排序,并且将基于预先确定的规则.

我试图找出php排序函数,但我只能按照字母顺序或数字顺序对数组进行排序.

我已经开始工作的是一个if语句和循环块,我想尽快摆脱那个慢速代码.

小智 6

使用Jonathan建议使用usort,您可以在单独的函数中定义自定义规则以进行排序,例如:

function getAnimalValue($animal) {
    switch($animal) {
        case 'Lion':
            return 1;
        case 'Dog':
            return 2;
        case 'Zeebra':
            return 3;
        case 'Cat':
            return 4;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

然后,实现自己的比较功能:

function compare($itemA, $itemB) {
    $a = getAnimalValue($itemA['animal']);
    $b = getAnimalValue($itemB['animal']);
    if ($a == $b) {
        return 0;
    }
    return ($a < $b) ? -1 : 1;
}
Run Code Online (Sandbox Code Playgroud)

最后,使用compare函数调用usort:

usort($array, "compare");
Run Code Online (Sandbox Code Playgroud)