douaoj0994 2016-01-05 19:35
浏览 47
已采纳

如何获得多维数组的多个交叉点?

Initial:

Array
(
    [0] => Array
        (
            [0] => a
            [1] => b
        )

    [1] => Array
        (
            [0] => a
            [1] => c
        )

    [2] => Array
        (
            [0] => c
            [1] => b
        )
    [3] => Array
        (
            [0] => d
            [1] => e
        )        
)

Result:

Array
(
    [0] => Array
        (
            [0] => a
            [1] => b
            [2] => c
        )
    [1] => Array
        (
            [0] => d
            [1] => e
        )        
)

The first three items of initial array are related to each other but last one not. I think it can be solved by using Floyd-Warshall Algoritm. Please help me to get result.

  • 写回答

2条回答 默认 最新

  • duanquan4451 2016-01-05 19:52
    关注

    No idea what floyd-warshall algorhitm is, and not sure about your optimatization needs, but I made this:

    $array = array(
       ['a', 'b'],
       ['a', 'c'],
       ['c', 'b'],
       ['d', 'e']
    );
    
    $result = array();
    foreach($array as $itemOriginal){ //passing every array from the original array
       $passed = false;
    
       foreach($result as &$itemResult){ //passing every array from the new array (empty in the start)
          foreach($itemOriginal as $item){ //passing every item from original arrays
             if(in_array($item, $itemResult)){ //checking if the item is in one of earlier passed array transfered into new array already
                $itemResult = array_unique(array_merge($itemResult,  $itemOriginal)); //merging items into new array if one of their items equals
                $passed = true; //no need to check another item from the current original array
                break;
             }
          }
    
          if($passed == true) //no need to find any of original items in new array
             break;
       }
    
       if($passed == false) //for case the none of checked original items are in new array
          $result[] = $itemOriginal;
    }
    
    echo '<pre>';
    print_r($result); //to check it
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog