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 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染