将数组拆分为唯一对

时间:2010-09-22 14:39:28

标签: php arrays

假设我从一个简单的数组开始(理论上可以是任何长度):

$ids  = array(1,2,3,4);

将此数组拆分为独特对数组的最佳解决方案是什么:

$pair[0] = array(1,2);
$pair[1] = array(1,3);
$pair[2] = array(1,4);
$pair[3] = array(2,3);
$pair[4] = array(2,4);
$pair[5] = array(3,4);

6 个答案:

答案 0 :(得分:3)

最简单的解决方案是使用嵌套循环并构建组合,但请注意这里的复杂性为O(n 2 )。

$ids = array(1,2,3,4,4);
$combinations = array();

$ids = array_unique($ids); // remove duplicates
$num_ids = count($ids);

for ($i = 0; $i < $num_ids; $i++)
{
  for ($j = $i+1; $j < $num_ids; $j++)
  {
    $combinations[] = array($ids[$i], $ids[$j]);
  }
}

http://www.ideone.com/9wzvP

中查看此操作

答案 1 :(得分:1)

修正了array_chunk()

的初始跳枪建议

请改为尝试:

$ids  = array(1, 2, 3, 4);
$out = array();

while ($item = array_shift($ids)) {
    foreach ($ids as $key=>$value) {
        $out[] = array($item, $value);
    }
}

答案 2 :(得分:1)

可能不是最好的解决方案

$ids  = array(1,2,3,4);

$pairs = array();
foreach($ids as $key => $data){
    foreach($ids as $subkey => $subdata){
        if( $subkey != $key){
            if(!in_array(array($subdata, $data) , $pairs) ){
                $pairs[] = array($data, $subdata);
            }
        }
    }
}

无论如何都有效

答案 3 :(得分:1)

甜蜜的解决方案,Nev Stokes! 我更改了'while'语句,以避免在其中一个值为0时断开循环:

$ids  = array(0, 1, 2, 3, 4);
$out = array();

while ( !is_null( $item = array_shift($ids) )  ) {
    foreach ($ids as $key=>$value) {
        $out[] = array($item, $value);
    }

}

答案 4 :(得分:0)

$ids  = array(1,2,3,4);
$result=array();
foreach($ids as $value_1)
{
  foreach($ids as $value_2)
  {
     if($value_1 !=$value_2)
     {
       $result[]=array($value_1,$value_2);
     }
   }
}
echo "<pre>";
print_r($result);

答案 5 :(得分:-1)

$ pair = array_chunk($ ids,2);

http://www.php.net/manual/en/function.array-chunk.php