Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何获得多维数组的多个交点?_Php_Arrays_Floyd Warshall - Fatal编程技术网

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

Php 如何获得多维数组的多个交点?,php,arrays,floyd-warshall,Php,Arrays,Floyd Warshall,首字母: Array ( [0] => Array ( [0] => a [1] => b ) [1] => Array ( [0] => a [1] => c ) [2] => Array ( [0] => c

首字母:

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
        )        
)
结果:

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

初始数组的前三项相互关联,但最后一项不相关。我认为这可以通过使用弗洛伊德·沃沙尔算法来解决。请帮助我获得结果。

不知道floyd warshall algorhitm是什么,也不确定您的优化需求,但我做了以下几点:

$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
$array=array(
['a','b'],
[a',c'],
[c'、[b'],
['d','e']
);
$result=array();
foreach($array as$itemOriginal){//传递原始数组中的每个数组
$passed=false;
foreach($result as&$itemResult){//传递新数组中的每个数组(开始时为空)
foreach($itemOriginal作为$item){//传递原始数组中的每个项
if(in_数组($item,$itemResult)){//检查该项是否在已传输到新数组的较早传递数组中
$itemResult=array_unique(array_merge($itemResult,$itemOriginal));//如果其中一个项等于
$passed=true;//无需检查当前原始数组中的其他项
打破
}
}
if($passed==true)//无需在新数组中查找任何原始项
打破
}
if($passed==false)//对于这种情况,选中的原始项都不在新数组中
$result[]=$itemOriginal;
}
回声';
打印(结果)//检查一下

Stack overflow(堆栈溢出)问题预计会显示出一些自己解决问题的努力。@Dagon,对不起,伙计-我回答了:-[@Reloecc我有一大堆工作要做,我可以免费发给你吗?;)array_merge不在乎口是心非,我用array_Uniques解决了这个问题谢谢你的回答。太好了,谢谢你@Reloecc@user3757515很高兴为您提供帮助。最好对您的更改进行解释,这样就不会太明显了。@cubejokey我没有做任何更改,你在说什么?:/抱歉,那么请解释一下你的代码,如果这更有意义的话。
$result = array();
foreach ($array as $item) {
    // If we're just getting started, get started
    if (count($result) === 0) {
        $result[] = $item;
    // Otherwise, look for merge opportunities
    } else {
        $merged = false;
        // Loop existing items
        foreach ($result as $k => $resultItem) {
            // If there's a match, merge & break
            if (count(array_intersect($resultItem, $item)) > 0) {
                $result[$k] = array_merge($resultItem, $item);
                $merged = true;
                break;
            }
        }
        // If no match was found, create a new element
        if (!$merged) {
            $result[] = $item;
        }
    }
}