假设我从一个简单的数组开始(理论上可以是任何长度):
$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);
答案 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]);
}
}
中查看此操作
答案 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);