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

Здравствуйте! Есть массив следующего вида:
Array
(
    [0] => Array
        (
            [0] => aa
            [1] => bb
            [2] => cc
        )

    [1] => Array
        (
            [0] => dd
            [1] => ee
            [2] => ff
            [3] => gg
        )

    [2] => Array
        (
            [0] => hh
            [1] => ii
        )
)
Не могу понять как реализовать перебор, чтобы результат был следующий:
aa dd hh, aa dd ii, aa ee hh, aa ee ii, и так далее. Важно, что количество строк как и количество элементов в каждой строке может быть разным.

Прошу помощи!
  • Вопрос задан
  • 106 просмотров
Решения вопроса 1
gzhegow
@gzhegow
aka "ОбнимиБизнесмена"
На пхп из коробки сложновато, вы говорите об операции "product" которая является частью комбинаторики.

Вот у меня класс есть, где я это из python портировал:
https://github.com/6562680/support/blob/main/src/X...

Но мне кажется, вам будет сложно разобрать что там написано поэтому я вам простой код напишу под вашу задачу:
$arr = [
	['aa', 'bb', 'cc'],
	['dd', 'ee', 'ff', 'gg'],
	['hh', 'ii'],
];

function _array_product(array $pools) {
    $result = [ [] ];

    foreach ( $pools as $pool ) {
        $resultCurrent = [];

        foreach ( $result as $x ) {
            foreach ( $pool as $y ) {
                $resultCurrent[] = array_merge($x, [ $y ]);
            }
        }

        $result = $resultCurrent;
    }

    foreach ( $result as $item ) {
        yield $item;
    }
}

foreach (_array_product($arr) as $val) {
	var_dump($val);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы