php - 不同目的地的数组排序算法

标签 php arrays sorting

我一直在努力解决这个问题,但没有成功。

问题是 - 我有一个用于不同位置的数组。

例如:

   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'];
}

Demo

将会有更有效的方法来做到这一点,以及可以优化基本算法的方法,例如通过翻转 $from 以便可以直接通过键访问它而不是使用 array_search();但作为一个基本的路由器,它可以工作

关于php - 不同目的地的数组排序算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37139730/

相关文章:

PHP 删除 HTTP header

php - 如果提交后已经过了一个小时则更新记录

php - 在 Azure 上开发 PHP-MySQL 应用程序

java - 按列表大小对映射中的条目进行排序

C选择排序谬误,不会对最后3个数字进行排序

php - 碳获取指定开始年份和当前年份之间的年份

c - 如何在C中检测未初始化的字符串

c - 内存分配错误 : Thread 1: EXC_BAD_ACCESS (code=2, 地址=0x7fff5f3ffff8)

arrays - 如何在 Swift 中将一组自定义对象一次性保存到核心数据存储中

php - 从 array_count_values 中提取信息