php – 针对不同目的地的数组排序算法
发布时间:2020-12-13 17:00:33 所属栏目:PHP教程 来源:网络整理
导读:我一直试图解决这个问题,但没有运气. 问题是 – 我有一个不同位置的数组. 例如: Array ([0] = Array ( [from] = Paris [to] = Marseille )[1] = Array ( [from] = Marseille [to] = Valencia )[2] = Array ( [from] = Valencia [to] = Algiers )[3] = Array
我一直试图解决这个问题,但没有运气.
问题是 – 我有一个不同位置的数组. 例如: 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键继续. 例如,如果我的位置是“巴黎”而位置“马赛”,那么下一个数组顺序应该是从“马赛”到“瓦伦西亚”,再次下一个阵列从应该是“瓦伦西亚”和“新位置”. 我不相信是否有任何可用的内置功能. 解决方法
只要链(或循环)中没有中断,则以下函数应构建已排序的路径:
$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']; } Demo 将有更有效的方法来实现这一点,以及可以优化基本算法的方法,例如,通过翻转$来使其可以通过键直接访问而不是使用array_search();但作为基本的路由器,它的工作原理 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |