Испытываю сложность с тем, чтобы перебрать массивы. Гуглил несколько часов напролет -- на удивление, ничего не нашел.
Суть следующая. Есть несколько массивов вида:
Array ( [2] => Array ( [n] => 1 [d] => 1 [p] => ) [3] => Array ( [n] => 2 [d] => 2 [p] => ) [4] => Array ( [n] => 3 [d] => 3 [p] => ) [5] => Array ( [n] => 4 [d] => 4 [p] => ) [6] => Array ( [n] => 5 [d] => 5 [p] => )
Array ( [2] => Array ( [n] => 1 [d] => 1 [p] => ) [3] => Array ( [n] => 2 [d] => 2 [p] => ) [4] => Array ( [n] => 3 [d] => 3 [p] => ) [5] => Array ( [n] => 4 [d] => 4 [p] => ) [6] => Array ( [n] => 5 [d] => 5 [p] => )
Array ( [2] => Array ( [n] => 1 [d] => 1 [p] => ) [3] => Array ( [n] => 2 [d] => 2 [p] => ) [4] => Array ( [n] => 3 [d] => 3 [p] => ) [5] => Array ( [n] => 4 [d] => 4 [p] => ) [6] => Array ( [n] => 5 [d] => 5 [p] => )
Ключ [n] -- это id.
Нам нужно перебрать все вариации id. Получить все возможные переборы.
1-1-1 1-2-1 1-3-1 1-1-2 1-1-3 1-1-4 2-2-2 ... Другими словами создать такого образа максимум переборок, чтобы впоследствии можно было уже работать с другими ключами, сравнивать их, и вообще использовать :)
Буду рад любой подсказке :) Спасибо!
Не очень понятен вопрос, я понял так:
$ids[1]=array_filter($arr1, function($v, $k) { return $v['n']; }); // создаем массивы из id
$ids[2]=array_filter($arr2, function($v, $k) { return $v['n']; });
$ids[3]=array_filter($arr3, function($v, $k) { return $v['n']; });
foreach($ids[1] as $v1){
foreach($ids[2] as $v2){
foreach($ids[3] as $v3){
$out[$v1.'-'.$v2.'-'.$v3]=1;
}
}
}
echo implode('<br>',array_keys($out));
Подготовка всего массива, как предложил Nsk - хорошо. Но вот лучший вариант, если упретесь в ограничение размера памяти. Или если нужно остановиться, не перебирая абсолютно все. Прошу любить и жаловать: yield
// Исходные данные
$arr1 = [ ['n' => 1], ['n' => 2], ['n' => 3] ];
$arr2 = [ ['n' => 1], ['n' => 2], ['n' => 3] ];
$arr3 = [ ['n' => 1], ['n' => 2], ['n' => 3] ];
// Получение очередного ключа
function getKey($arr) {
foreach($arr as $v) {
// используйте это!
yield $v['n'];
}
}
// Получение составного ключа
function getCompositeKey($arr1, $arr2, $arr3) {
foreach(getKey($arr1) as $v1){
foreach(getKey($arr2) as $v2){
foreach(getKey($arr3) as $v3){
yield sprintf('%d-%d-%d', $v1, $v2, $v3);
}
}
}
}
foreach(getCompositeKey($arr1, $arr2, $arr3) as $val) {
echo $val . PHP_EOL;
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости