PHP拓扑排序 列表:控制器名称=>优先级:必需的控制器
已排序和预期输出:PHP拓扑排序 列表:控制器名称=>优先级:必需的控制器,php,algorithm,sorting,Php,Algorithm,Sorting,已排序和预期输出: controller_2 controller_1 controller_4 controller_3 第一种是按优先级排序, 然后根据之前要加载的所需控制器重新排序。 确保不因控制器相互要求而陷入无限循环 我想我需要这样的东西: function cmp($a, $b) { if ($a == $b) { return 0; } return ($a < $b) ? -1 : 1; } uasort($controllers
controller_2
controller_1
controller_4
controller_3
第一种是按优先级排序,
然后根据之前要加载的所需控制器重新排序。
确保不因控制器相互要求而陷入无限循环
我想我需要这样的东西:
function cmp($a, $b) {
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
uasort($controllers_array, 'cmp');
请通过以下步骤帮助解决此问题:
移除无限循环控制器ex:controller\u loopexit1和controller\u loopexit2
删除与不存在的控制器具有依赖关系的控制器,例如:依赖于控制器的控制器不存在。
按优先级编号对剩余项目进行排序,最低优先
第二种按依赖项排序
代码:
输出:
Message: Dependency `controller_not_exists` not found, required by `controller_x`
Message: Circular dependency found: controller_loopexit1->controller_loopexit2->controller_loopexit1
Array
(
[0] => controller_2
[1] => controller_1
[2] => controller_4
[3] => controller_not_exists
[4] => controller_x
[5] => controller_3
)
Array
(
[0] => controller_2
[1] => controller_1
[2] => controller_4
[3] => controller_3
)
案例2
输入添加缺少的依赖项,您仍然具有循环依赖项/无限循环:
$controllersList = array(
"controller_3" => "3",
"controller_1" => "1:controller_2",
"controller_2" => "2",
"controller_4" => "1:controller_2&controller_1",
"controller_x" => "2:controller_not_exists",
"controller_loopexit1" => "4:controller_loopexit2",
"controller_loopexit2" => "5:controller_loopexit1",
"controller_not_exists" => "10:controller_2",
);
输出:
Message: Dependency `controller_not_exists` not found, required by `controller_x`
Message: Circular dependency found: controller_loopexit1->controller_loopexit2->controller_loopexit1
Array
(
[0] => controller_2
[1] => controller_1
[2] => controller_4
[3] => controller_not_exists
[4] => controller_x
[5] => controller_3
)
Array
(
[0] => controller_2
[1] => controller_1
[2] => controller_4
[3] => controller_3
)
案例3
输入删除了具有循环依赖关系的控制器:
$controllersList = array(
"controller_3" => "3",
"controller_1" => "1:controller_2",
"controller_2" => "2",
"controller_4" => "1:controller_2&controller_1",
"controller_x" => "2:controller_not_exists",
"controller_loopexit1" => "4:controller_loopexit2",
"controller_loopexit2" => "5:controller_loopexit1"
);
$controllersList = array(
"controller_3" => "3",
"controller_1" => "1:controller_2",
"controller_2" => "2",
"controller_4" => "1:controller_2&controller_1",
"controller_x" => "2:controller_not_exists",
"controller_not_exists" => "10:controller_2",
);
输出:
Message: Dependency `controller_not_exists` not found, required by `controller_x`
Message: Circular dependency found: controller_loopexit1->controller_loopexit2->controller_loopexit1
Array
(
[0] => controller_2
[1] => controller_1
[2] => controller_4
[3] => controller_not_exists
[4] => controller_x
[5] => controller_3
)
Array
(
[0] => controller_2
[1] => controller_1
[2] => controller_4
[3] => controller_3
)
案例4
输入已删除控制器\u不存在且控制器\u x:
输出:
Message: Dependency `controller_not_exists` not found, required by `controller_x`
Message: Circular dependency found: controller_loopexit1->controller_loopexit2->controller_loopexit1
Array
(
[0] => controller_2
[1] => controller_1
[2] => controller_4
[3] => controller_not_exists
[4] => controller_x
[5] => controller_3
)
Array
(
[0] => controller_2
[1] => controller_1
[2] => controller_4
[3] => controller_3
)
您的输入包含7项,您的输出只有4项?优先级是如何定义的?是的,这是正确的,如果不满足所需的控制器,则删除该项。您需要的是拓扑排序。我在这里回答了一个类似的关于依赖关系的问题,这应该让您开始学习。最后,您需要添加的唯一附加内容是按优先级排序。也应该有帮助。这里有两个独立的问题:1删除周期2排序。你不应该在同一个问题中混用两个问题。