我一直在努力解决这个问题,但没有成功。
问题是 - 我有一个用于不同位置的数组。
例如:
Array
(
[0] => Array
(
[from] => Paris
[to] => Marseille
)
[1] => Array
(
[from] => Marseille
[to] => Valencia
)
[2] => Array
(
[from] => Valencia
[to] => Algiers
)
[3] => Array
(
[from] => Algiers
[to] => Abu Dhabi
)
)
无论我给出什么命令,它都应该始终返回下一个目的地“从”它结束的地方。
要排序的数组,以便 from
键从前一个数组的 to
键继续。
例如,如果我的起始位置是“Paris”,To 位置是“Marseille”,那么下一个数组顺序应该是 From“Marseille”和 To“Valencia”,下一个数组顺序应该是“Valencia”和“New location” ".
我不相信有没有内置函数可用。
最佳答案
只要链中没有中断(或循环),那么下面的函数应该构建一个排序的路由:
$from = array_column($route, 'from');
$to = array_column($route, 'to');
$start = array_diff($from, $to);
$sortedRoute = [$route[key($start)]];
$start = $route[key($start)]['to'];
while (true) {
$key = array_search($start, $from);
if ($key === false)
break;
$sortedRoute[] = $route[$key];
$start = $route[$key]['to'];
}
将会有更有效的方法来做到这一点,以及可以优化基本算法的方法,例如通过翻转 $from 以便可以直接通过键访问它而不是使用 array_search();但作为一个基本的路由器,它可以工作
关于php - 不同目的地的数组排序算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37139730/