Здравствуйте! Есть массив:
array(1,7,9,10);
Как мне получить из него пары, но не просто разбив случайно по 2 числа, а чтобы каждое было в паре с каждым и несколько раз. Например, из этого массива мне нужно получить значения:
array(1,7);
array(1,9);
array(1,10);
array(7,9);
array(7,10);
array(9,10);
То-есть все числа встречаются в парах, так-же бывает, что нужно сгенерировать эти пары несколько раз, причем так, чтобы они менялись местами. Например если нужно это сделать 3 раза - получится что числа 1 и 7 встретятся 3 раза так в паре:
array(1,7);
array(7,1);
array(1,7);
Я бы сделал проще и универсальнее. Пусть это будет одна функция, которая принимает исходные данные и количество повторений.
Код:
<?php
function generateArrayPairs(array $data, int $repeat = 1) {
$data = array_values($data); // Чтобы убедиться, что индексы идут по порядку
$result = []; // Контейнер с результатом
foreach ($data as $outerKey => $outerElement) {
$internalData = array_slice($data, $outerKey + 1); // для формирования пары оставляем только элементы справа от текущего
foreach ($internalData as $innerKey => $innerElement) {
$pair = [$outerElement, $innerElement]; // Сохраняем, т.к. в случае повторения пара нам ещё понадобится
$result[] = $pair; // Добавляем пару в результат
if ($repeat > 1) {
$reversedPair = [$innerElement, $outerElement]; // Тоже сохраняем, чтобы не генерировать кучу раз.
for ($i = 2; $i <= $repeat; $i++) {
$result[] = ($i % 2 == 0) ? $reversedPair : $pair; // меняем элементы местами каждое 2-е повторение
}
}
}
}
return $result;
}
Поиграться и посмотреть результат можно здесь: http://sandbox.onlinephpfunctions.com/code/1b487ef1efb283df6244349fcad0ef3af2a4ed51
Это только по уникальным парам, правила повторения не указаны.
$data = array(1,8,9,10);
$final = array();
for($index = 0; $index < count($data); $index++) {
for ($subIndex = $index; $subIndex < count($data); $subIndex++) {
$first = $data[$index];
$second = $data[$subIndex];
if($index != $subIndex && (!isset($data[$index . '-' . $subIndex]) || !isset($data[$subIndex . '-' . $index]))) {
$final[$index . '-' . $subIndex] = array($data[$index], $data[$subIndex]);
}
}
}
$final = array_values($final);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Скажем есть таблица accounts, в ней поле account_bagДопустим уже есть строка со значением 1, перед INSERT использую SELECT MAX, чтобы следующая строка была...
Переносил сайт с одного сервера на другой с базой данных postgresqlБазу подключил