Как создать матрицу динамических c массивов в один массив? - PullRequest
4 голосов
/ 12 февраля 2020

У меня есть число динамических c, например:

    $a= [ 1, 2 ];
    $b= [ 3, 4, 5 ];
    $c= [ 6 ];

Я хочу объединить каждое число в каждой строке с родительскими значениями, сохраняющимися до тех пор, пока не будут завершены все дочерние значения. Таким образом, начиная с самого низкого уровня, матрица создается следующим образом:

Третий уровень:

[ 6 ]

Второй уровень:

[ 
   [3 , 6] , 
   [4 , 6] , 
   [5 , 6]
]

Первый / Верхний уровень (конечный уровень):

[
  [1,  3,  6] , 
  [1,  4 , 6] ,
  [1,  5 , 6] ,
  [2,  3,  6] , 
  [2,  4 , 6] , 
  [2,  5 , 6]
]

Примечание: Количество массивов может варьироваться, а количество элементов в каждом массив также может измениться. Я хочу, чтобы получить их в матрицу, как указано выше в конечном результате. Любые идеи о том, как начать?

1 Ответ

4 голосов
/ 12 февраля 2020

У меня раньше была такая же проблема, вот что попробовал.

1 - Вы можете использовать хелпер crossJoin с коллекцией

$results=collect($a)->crossJoin($b,$c);

2 -Вы можете использовать что-то родное, как это

 function combinations($arrays, $i = 0) {
            if (!isset($arrays[$i])) {
                return array();
            }
            if ($i == count($arrays) - 1) {
                return $arrays[$i];
            }

            // get combinations from subsequent arrays
            $tmp = combinations($arrays, $i + 1);

            $result = array();

            // concat each array from tmp with each element from $arrays[$i]
            foreach ($arrays[$i] as $v) {
                foreach ($tmp as $t) {
                    $result[] = is_array($t) ?
                        array_merge(array($v), $t) :
                        array($v, $t);
                }
            }

            return $result;
        }

        dd(
            combinations(
                array(
                    array('1','2','3'),
                    array('4','5','6'),
                    array('7','8')
                )
            )
        );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...