說我從一個簡單的陣列(其可以是任何長度的理論上):拆分陣列分成獨特對
$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