PHP-使用具有复杂功能的提供程序排序数组列表

我想通过itemOrderList(在示例代码中的变量中可用)对myobject列表(      - "traefik.enable=true"       - "traefik.http.routers.my-app-router.tls=true"       - "traefik.http.routers.my-app-router.rule=PathPrefix(`/my-app`)"       - "traefik.http.middlewares.test-redirectregex.redirectregex.regex=^(https|http)://([a-zA-Z0-9_.-]+)/([a-zA-Z0-9_.-]+)$$"       - "traefik.http.middlewares.test-redirectregex.redirectregex.replacement=$${1}://$${2}/$${3}/"       - "traefik.http.routers.my-app-router.middlewares=test-redirectregex@docker,path-strip@file" )进行排序,例如,不带提供程序的myobject,带Gmail提供程序的myobject,带提供程序的myobject Hotmail提供商,等等。

$myobjectList

我应该尊重的订单清单是:

private function reOrderByProvider(
    myobject $actualObject,myobject $nextObject
): int {
    $actual = array_search($actualObject->getProvider(),$this->itemOrderList);
    $next   = array_search($nextObject->getProvider(),$this->itemOrderList);

    if ($actual === $next) {
        return 0;
    }

    return (($next === false) || ($actual < $next)) ? -1 : +1;
}

我与Gmail提供程序,Hotmail提供程序有多个对象,并且列表中未列出某些对象,这些未列出的提供程序必须在排序的末尾。

为此,我使用此PHP函数$this->itemOrderList = [null,'gmail','hotmail'];

kaka29999 回答:PHP-使用具有复杂功能的提供程序排序数组列表

在这种情况下,我建议为每个提供程序使用某种权重,您的排序功能如下所示:

function reOrderByProvider(
    MyObject $actualObject,MyObject $nextObject
) {
    $weights = [
        null => 100,'gmail' => 50,'hotmail' => 25,];
    $provider = $actualObject->getProvider();
    $actualObjectWeight = array_key_exists($provider,$weights) ? $weights[$provider] : 0;
    $provider = $nextObject->getProvider();
    $nextObjectWeight = array_key_exists($provider,$weights) ? $weights[$provider] : 0;

    return $nextObjectWeight - $actualObjectWeight;
}

提琴here

本文链接:https://www.f2er.com/3168045.html

大家都在问