Как сделать пары значений массива?

Рассмотрим следующий массив:

$input = array('A', 'B', 'C', 'D'); 

Я ищу способ сделать цикл, хотя этот массив, записывая все возможные пары из двух значений. В этом примере: AB AC AD BC BD CD. Пожалуйста, не то, что BA не считается парой, поскольку AB уже упоминался:

 $output = array( 'A' => 'B', 'A' => 'C', 'A' => 'D', 'B' => 'C', 'B' => 'D' ); 

Любые данные о том, как это начать, оцениваются!

Solutions Collecting From Web of "Как сделать пары значений массива?"

 $output=array(); for ($i=0;$i<sizeof($input);$i++) { $k=$input[$i]; for ($j=$i+1;$j<sizeof($input);$j++) { $v=$input[$j]; $output[]=array($k=>$v); } } 

редактировать

По вашему мнению, реструктурированный результат

 $output=array(); //See below for ($i=0;$i<sizeof($input);$i++) { $k=$input[$i]; $v=array(); for ($j=$i+1;$j<sizeof($input);$j++) { $v[]=$input[$j]; } $output[]=array($k=>$v); } 

Это даст вам «D» => Array () как последнюю строку, если вы не хотите, чтобы hti вам нужно было изменить

 for ($i=0;$i<sizeof($input);$i++) { 

в

 for ($i=0;$i<sizeof($input)-1;$i++) { 

что-то вроде этого возможно;

 $input = array('A', 'B', 'C', 'D'); $input_copy = $input; $output = array(); $i = 0; foreach($input as $val) { $j = 0; foreach($input_copy as $cval) { if($j < $i) break; $output[] = array($val => $cval); $j++; } $i++; } $output = array( 0 => array('A' => 'A'), 1 => array('A' => 'B'), 2 => array('A' => 'C'), ... ); 

Обратите внимание, что ваш выходной массив невозможен, так как каждый раз перезаписывается ключ

Это невозможно в PHP, так как массив PHP может иметь только уникальные ключи.

Вы можете получить вывод как

 $output = array( 'A' => array('B','C','D'), 'B' => array('C','D') ); $input = array('A', 'B', 'C', 'D'); foreach($input as $key => $value){ $tempKey = $key; for($key +1 ; $key < count($input) ; $key++){ $result[$tempKey][] = $input[$key]; } } 

Вы можете использовать этот общий метод:

 function combine($inputArray, &$outputArray, $index, $combLen) { global $outstr; for ($i = $index; $i < count($inputArray); $i++) { $outstr.=$inputArray[$i]; if(strlen($outstr) == $combLen) { $outputArray[]= $outstr; } combine($inputArray, $outputArray, $i + 1, $combLen); $outstr = substr($outstr, 0, strlen($outstr)-1); } } 

Смотрите на идеон

если вам нужно работать с парами в виде массивов

 $pairs = []; foreach($a as $k => $v) { foreach(array_slice($a, $k + 1) as $k2 => $v2) { $pairs[] = [$v, $v2]; } }