Алгоритм перебора n массивов

_RVK_

Новичок
Алгоритм перебора n массивов

Есть переменная в которой n элементов каждый из которых масив с разным количеством элементов.
Нужно составить все возможные комбинации из элементов этих масивов.

Как такую задачу решить наиболее оптимально?
 

Demiurg

Guest
что то я не понял. нужно составить всевозможные комбинации из всех элементов ? то есть комбинации из n чисел ?
 

_RVK_

Новичок
Вот например
PHP:
$arr1=array(1,2,3,4,5);
$arr2=array(1,2);
$arr3=array(1,2,3,4);
...
$arrN=array(....);

$main_array=array($arr1,$arr2,$arr3,...,$arrN);
нужно составить масив где например при N=3
$result_array[1]==array(1,1,1);
$result_array[2]==array(2,1,1);
...
$result_array[6]==array(1,2,1);
$result_array[7]==array(2,2,1);
...

И так далее. Те получить комбинации всех чисел из массивов arr1,arr2,arr3...arrN...
 

Дmитpий

Guest
Ты наверное имел ввиду, получить что-то типа:
$result_array[1]==array(1,1,1);
$result_array[2]==array(1,1,2);
$result_array[3]==array(1,2,1);
$result_array[4]==array(1,2,2);
$result_array[5]==array(2,1,1);
$result_array[6]==array(2,1,2);
$result_array[7]==array(2,2,1);
$result_array[8]==array(2,2,2);

Потому как я что-то не улавливаю логической связи в твоем результате.

Я над этим подумаю, но сначала ответь пожалуйста, а зачем это?

Просто любопытство.
 

_RVK_

Новичок
Количество элементов $main_array т.е. масивов из элементов которых нужно составить все комбинации.
 

Demiurg

Guest
>Количество элементов $main_array т.е. масивов из элементов которых нужно составить все комбинации.
тогда откуда взялись 1 и 2 ?
 

phisy

Guest
Задачу так можно представить. Все элементы $arr1..$arrN
как один массив и цель из них составить всевозможные массивы длины 3? Такая задача что-ли?
 

_RVK_

Новичок
Дmитpий, мне нужно делать HTTP запросы к странице с определнным количеством параметров. Количество возможных комбинаций конечно но нужно передать все возможные комбинации.

Например нужно сэмулировать запрос формы для выборки записей из БД. есть поля city, name....

Список городов известен. Мне нужно в каждом например найти информацию о людях с именами Mike, Bob, Tom.

Это простой пример. Будут более сложные варианты.

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

_RVK_

Новичок
Задачу так можно представить. Все элементы $arr1..$arrN
как один массив и цель из них составить всевозможные массивы длины 3? Такая задача что-ли?
Нет, нельзя что бы в комбинации было более 1 и менее 1 элемента из одного массива. Длина комбинации равна числу исходных масивов.
 

phisy

Guest
Через вложенные циклы попробуй.
Есть $arr1=(gorod1,gorod2)
$arr2=(Mike,Bob,Tom)

цикл 1 по городам
цикл 2 по людям

результат :

(gorod1,Mike);
(gorod1,Bob);
(gorod1,Tom);
(gorod2,Mike);
(gorod2,Bob);
(gorod2,Tom);
 

Larson

Новичок
Вот например для двух массивов -
Берешь первый элемент первого массива и подставляешь к нему поочередно все элементы второго массива. Потом берешь второй первого и повторяешь цикл со вторым и т.д. пока первый не кончится.
При N массивах будет n циклов.
 

_RVK_

Новичок
Автор оригинала: phisy
Через вложенные циклы попробуй.
Есть $arr1=(gorod1,gorod2)
$arr2=(Mike,Bob,Tom)

цикл 1 по городам
цикл 2 по людям

результат :

(gorod1,Mike);
(gorod1,Bob);
(gorod1,Tom);
(gorod2,Mike);
(gorod2,Bob);
(gorod2,Tom);
Нельзя определить количество этих циклов так как неизвесно количество масивов. Только в Run time это можно определить.
 

Larson

Новичок
А ты в Run time можешь определить количество массивов? Если да, то сделай что-то типа рекурсии с одним циклом.
 

_RVK_

Новичок
Автор оригинала: Larson
А ты в Run time можешь определить количество массивов? Если да, то сделай что-то типа рекурсии с одним циклом.
Примерчик простой можно?
 

RomikChef

Guest
дизель.
откуда берутся эти массивы?
почему они не являются сразу элементами основного массива, ась?
 

_RVK_

Новичок
откуда берутся эти массивы
Есть XML документ где есть набор элементов атрибут каждого это список. Задача написать скрипт которому можно подсунуть любую XML.
Пример:
<site url='...>
<param key="city" value="city1,city2,city3...."/>
<param key="zip" value="zip1,zip2..."/>
<param key="county" value="county1,county2..."/>
</site>

Скрипт должен обработать её и сделать запросы к странице со всеми возможными вариантами.
почему они не являются сразу элементами основного массива
Читаем из XML и складываем каждый param как элемент главного масива. Код который привёл вверху это пример. т.е эти масивы arr1,arr2,arr3 находятся в XML.
 

RomikChef

Guest
ну так в тот момент, когда они "берутся" из хмл, ты их и складывай в не в arr1 arr2
а в $arr[1] $arr[2]
и тогда проблем с подсчетом не будет
 

_RVK_

Новичок
Автор оригинала: RomikChef
ну так в тот момент, когда они "берутся" из хмл, ты их и складывай в не в arr1 arr2
а в $arr[1] $arr[2]
и тогда проблем с подсчетом не будет
Не понял.... И что это даст? У меня будет масив но у него каждый элемент строка. Я ведь то же самое делаю только режу по запятым split()....
 
Сверху