说我从一个简单的阵列(其可以是任何长度的理论上):拆分阵列分成独特对
$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);
说我从一个简单的阵列(其可以是任何长度的理论上):拆分阵列分成独特对
$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);
最简单的解决方法是使用一个嵌套循环,构建组合,当您去,但是请注意,这里复杂度为O(N )。
$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]);
}
}
从array_chunk()
我最初的跳跃枪口建议固定试试这个:
$ids = array(1, 2, 3, 4);
$out = array();
while ($item = array_shift($ids)) {
foreach ($ids as $key=>$value) {
$out[] = array($item, $value);
}
}
'array_chunk'不会做OP想要什么,看一下例子输出。 OP希望组合。 – 2010-09-22 14:46:50
啊,傻了。我没有正确阅读输出! – 2010-09-22 14:48:37
$对= array_chunk($ IDS,2);
他在寻找一个笛卡尔乘积,而不是分裂阵列成小块...... – ircmaxell 2010-09-22 14:53:32
读取失败:( – SpacedMonkey 2010-09-22 15:00:50
可能不是最好的解决办法
$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);
}
}
}
}
在操作中查看反正它的工作原理
甜的解决方案,内华达州斯托克斯! 我改变了“而”语句,以避免环路断裂时的一个值是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);
}
}
$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);
你可以逃脱了'做in_array'检查'array_unique'上'$ ids'。而且你还可以速度它由之前的循环计数'$ ids'为前提的(因为它不会改变)。我只是因为你提到的复杂性提到这些... – ircmaxell 2010-09-22 15:01:37
@ircmaxell真有关第一计数'$ ids',尽管这不会影响的复杂性,我不认为你可以使用'array_unique'的时间提前,但...这取决于OP的目标。即如果'$ IDS =阵列(1,2,3,3)' ,应该[3,3]是结果? – 2010-09-22 15:04:54
我可以确认3,3不应该是结果 – robjmills 2010-09-22 15:05:50