@alex_liverpool

Как правильно выполнить перебор массивов?

Всем добрый день.
Имеется массив такого вида:
$result = [
    'A' => [1, 2, 3],
    'B' => [10, 20, 30],
    'C' => [100, 200, 300],
    'D' => ['a', 'b', 'c', 'd'],
];


Нужно выполнить перебор по типам (А, В, С, D) и получить массивы с каждым элементом из каждого типа поочередно:
[1, 10, 100, 'a'];
[2, 10, 100, 'a'];
[3, 10, 100, 'a'];
[1, 20, 100, 'a'];
[2, 20, 100, 'a'];
...
[3, 30, 300, 'd'];


Подскажите как правильно выполнить такой перебор, чтобы не делать 3 вложенных друг в друга цикла?
  • Вопрос задан
  • 99 просмотров
Решения вопроса 1
usdglander
@usdglander Куратор тега PHP
Yipee-ki-yay
По быстрому родилось какой то такое решение:
function deployValues(&$base, $values) {
    
    $newBase = [];
    
    foreach ($values as $i => $value) {
        foreach ($base as $j => $baseValue) {
            $orig = is_array($baseValue) ? $baseValue : [$baseValue];
            array_push($orig, $value);
            $newBase[] = $orig;
        }
    }
    
    $base = $newBase;
}

$r = [
    'A' => [1, 2, 3],
    'B' => [10, 20, 30],
    'C' => [100, 200, 300],
    'D' => ['a', 'b', 'c', 'd'],
];

$x = null;

foreach ($r as $c) {
    if ($x === null) {
        $x = $c;
    } else {
        deployValues($x, $c);
    }
}

print_r($x);


Не претендует на оптимальность формы и содержания, но основную суть отображает.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы