加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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();但作为基本的路由器,它的工作原理

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读