PHP « Перебор комбинаций. PHP.

Как создать комбинации на выходе?

Есть несколько групп слов (см. ниже), из которых необходимо создать комбинации.
Группа 1.
Пальто, Шапки, Носки
Группа 2.
Красный, Синий, Зеленый
Группа 3.
Мех, Кожа

Необходимы комбинации следующего вида, пример:
1) Пальто - красный - мех
2) Пальто - красный - кожа
3) Пальто - синий - мех
....
N) Носки - зеленый - кожа

При том условии, что группа занимает только свое место в порядке. Т.е. пальто не может быть 2-ым или 3-им словом в комбинации.

Заранее спасибо за помощь!

1 ответов


Если я правильно понимаю, то так:


$items = array('palto','noski','shapki');
    $colors = array('red','black','white');
    $materials = array('kozha','meh','aluminij');

    foreach($items as $item) {
      foreach($colors as $color) {
        foreach($materials as $material) {
          echo $item.'-'.$color.'-'.$material;
          echo '</br>';
        }
      }
    }
 


$params = array(
  array('palto','noski','shapki'),
  array('red','black','white'),
  array('kozha','meh'),
);
$generatedPairs = array();

function generate(&$params, &$generated, $depth=0, $basePair=array()) {
  foreach ($params[$depth] as $v) {
    if(count($params)-1 == $depth) {
      array_push($generated, array_merge($basePair, array($v)));
    } else {
      $basePair[$depth] = $v;
      generate($params, $generated, $depth+1, $basePair);
    }
  }
}

generate($params, $generatedPairs);
print_r($generatedPairs);
 

Array
(
    [0] => Array
        (
            [0] => palto
            [1] => red
            [2] => kozha
        )

    [1] => Array
        (
            [0] => palto
            [1] => red
            [2] => meh
        )
...
    [16] => Array
        (
            [0] => shapki
            [1] => white
            [2] => kozha
        )

    [17] => Array
        (
            [0] => shapki
            [1] => white
            [2] => meh
        )

)
 


$items = array('palto','noski','shapki');
$color = array('red','black','white');
$material = array('kozha','meh','aluminij');
 

а дальше функция for для нужно количества выходных данных.



for($i=0;$i<=100;$i++){

$items_unique = array_rand($items ,1);
$color_unique = array_rand($color,1);
$material_unique = array_rand($material,1);

echo $items_unique . '-' . $color_unique . '-' $material_unique;
}
 

Это то что надо?