Как сапоставить каждый элемент массива с каждым по одному разу?

103
08 февраля 2022, 12:50

Есть массив вида:

array (
    0 => 'A',
    1 => 'B',
    2 => 'C',
    3 => 'D'
)

Каким образом получить из него массив вида:

array (
    0 => 'A-B',
    1 => 'A-C',
    2 => 'A-D',
    3 => 'B-C',
    4 => 'B-D',
    5 => 'C-D'
)

То есть чтобы его значения как бы сопаставились с каждым из значений по одному разу.

Буду очень благодарен за помощь!

Answer 1

В этом случае надо идти по номерам элементов.

$input = array (
    0 => 'A',
    1 => 'B',
    2 => 'C',
    3 => 'D'
);
$output=array();
for ($i=0;$i<sizeof($input);$i++) {
  for ($j=$i+1;$j<sizeof($input);$j++) {
    $output[]="$input[$i]-$input[$j]";
  }
}

Результат

Array
(
    [0] => A-B
    [1] => A-C
    [2] => A-D
    [3] => B-C
    [4] => B-D
    [5] => C-D
)
Answer 2
$array = array (
    0 => 'A',
    1 => 'B',
    2 => 'C',
    3 => 'D'
);
$out_array = [];
foreach($array as $key=>$item){
    foreach($array as $value){
        if($item != $value){
            $out_array[] = sprintf('%s-%s',$item,$value);
        }
    }
    unset($array[$key]);
}

результат:

array(6) {
  [0]=>
  string(3) "A-B"
  [1]=>
  string(3) "A-C"
  [2]=>
  string(3) "A-D"
  [3]=>
  string(3) "B-C"
  [4]=>
  string(3) "B-D"
  [5]=>
  string(3) "C-D"
}
READ ALSO
Как правильно сделать sql запрос?

Как правильно сделать sql запрос?

Нужно что бы к каждой записи в блоге, отображались комментарии, оставленные непосредственно для записи

110
Проблема в ссылке на видео

Проблема в ссылке на видео

Озадачен вопросом и не мог понять и найти ответВот как выглядит моя ссылка и все работает хорошо

77
ES6 и его поведение. JavaScript [дубликат]

ES6 и его поведение. JavaScript [дубликат]

Всем приветХотел бы узнать мнение опытных кодеров, почему такое поведение у метода filter

145
Что значит оператор `!!`? [дубликат]

Что значит оператор `!!`? [дубликат]

Двойное не - что это значит?

79