2010-09-22 17 views
5

मैं एक साधारण सरणी (जो किसी भी लम्बाई के सैद्धांतिक रूप से किया जा सकता है) के साथ शुरू कहते हैं:अद्वितीय जोड़े में विभाजित सरणी

$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); 

उत्तर

3

सरल समाधान हालांकि जटिलता यहाँ 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]); 
    } 
} 

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

+0

आप '$_ids' पर 'array_unique' करके' in_array' चेक से दूर हो सकते हैं। और आप भी गति कर सकते हैं लूप्स से पहले एक पूर्व शर्त के रूप में '$ ids' की गणना करके इसे ऊपर उठाएं (क्योंकि यह बदलने वाला नहीं है)। मैं केवल इनका उल्लेख करता हूं क्योंकि आप जटिलता का उल्लेख करते हैं ... – ircmaxell

+0

@ircmaxell पहले' $ ids' 'की गणना करने के बारे में सही है, हालांकि जटिलता को प्रभावित नहीं करेगा। मुझे नहीं लगता कि आप समय से पहले 'array_unique' का उपयोग कर सकते हैं ... यह ओपी के लक्ष्य पर निर्भर करता है यानी। यदि' $ ids = array (1,2,3,3) ' , [3,3] परिणाम होना चाहिए? –

+0

मैं पुष्टि कर सकता हूं कि 3,3 परिणाम नहीं होना चाहिए – robjmills

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

'array_chunk' क्या ओ पी चाहता है उदाहरण के उत्पादन पर देखने से काम नहीं चलेगा,। ओपी संयोजन चाहता है। –

+0

आह, मुझे मूर्खतापूर्ण। मैंने आउटपुट को ठीक से पढ़ा नहीं! –

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); 
      } 
     } 
    } 
} 

पर कार्रवाई में देखें वैसे भी यह

1

मीठा समाधान, Nev स्टोक्स काम करता है! मैं 'जबकि' बयान बदल तोड़ने से पाश से बचने के लिए जब से एक मान 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); 
    } 

} 
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); 
संबंधित मुद्दे