сверхсложный цикл

bevaine

Новичок
сверхсложный цикл

Имеются три массива:
1.array {val11
val21
val31
}
2.array {val12
val22
val32
}
3.array {val13
val23
val33
}
вопрос, как мне задать цикл, чтобы последовательно каждый элемен массивов подставить в выходную строку, чтобы было так:
$str = val11.val12.val13
$str = val21.val12.val13
$str = val31.val12.val13
$str = val11.val22.val13
$str = val21.val22.val13
$str = val31.val22.val13
$str = val11.val32.val13
$str = val21.val32.val13
$str = val31.val32.val13
.....................
$str = val31.val32.val33

вообщем необходимо опробывать все варианты, только чтобы всё шло по порядку, т.е. например элементы 1 первого массива мохут быть только первыми в выходной строке а элементы 2 и 3-го массивов соответственно 2 и 3-ми в выходной строке, и не меняться местами.
 

vasa_c

Новичок
Для фиксированного небольшого числа массивов.

PHP:
$sz1 = sizeof( $A1 );
$sz2 = sizeof( $A2 );
$sz3 = sizeof( $A3 );

for( $i1 = 0; $i1 < $sz1; $i2++ )
  for ( $i2 = 0; $i2 < $sz2; $i2++ )
    for ( $i3 = 0; $i3 < $sz3; $i3++ )
      $str = $A1[ $i1 ].$A2[ $i2 ].$A3[ $i3 ];
Где Ai - соответственно массивы.
Вот такой сверхсложный цикл
 

a-kai

Новичок
foreach ($array1 as $val1) foreach ($array2 as $val2) foreach ($array3 as $val3) $str = $val1.$val2.$val3;

это надо?
 

Wicked

Новичок
На будущее: если массивов динамическое кол-во, то будет один цикл от 1 до произведения всех sizeof($A_N), из которого простыми арифметическими операциями вычисляется номер элемента каждого массива.
 

bevaine

Новичок
Автор оригинала: Wicked
На будущее: если массивов динамическое кол-во, то будет один цикл от 1 до произведения всех sizeof($A_N), из которого простыми арифметическими операциями вычисляется номер элемента каждого массива.
можно поподробнее, может примерчик покажите?
 

SiMM

Новичок
> На будущее: если массивов динамическое кол-во, то будет один цикл от 1 до произведения всех sizeof($A_N), из которого простыми арифметическими операциями вычисляется номер элемента каждого массива.
Не факт, что это себя оправдает. Да и код получится менее читабельным и похожим на танцы с бубном. ИМХО.
 

bevaine

Новичок
Автор оригинала: vasa_c
Для фиксированного небольшого числа массивов.

PHP:
$sz1 = sizeof( $A1 );
$sz2 = sizeof( $A2 );
$sz3 = sizeof( $A3 );

for( $i1 = 0; $i1 < $sz1; $i2++ )
  for ( $i2 = 0; $i2 < $sz2; $i2++ )
    for ( $i3 = 0; $i3 < $sz3; $i3++ )
      $str = $A1[ $i1 ].$A2[ $i2 ].$A3[ $i3 ];
Где Ai - соответственно массивы.
Вот такой сверхсложный цикл
а если у меня намного больше 3 массивов, все эти циклы не реально строить, то что делать?
 

Фанат

oncle terrible
Команда форума
тогда надо написать человеческим языком - что у тебя за массивы, откуда берутся,и что в них лежит.

но, скорее всего, очевидным ответом будут вложенные массивы
 

bevaine

Новичок
Автор оригинала: Фанат
тогда надо написать человеческим языком - что у тебя за массивы, откуда берутся,и что в них лежит.

но, скорее всего, очевидным ответом будут вложенные массивы
в самом первом посте я помоему все подробно написал, просто хочу еще добавить, что их может быть не 3, а больше.
 

Фанат

oncle terrible
Команда форума
я не пойму - я тебя уговаривать тебя, что ли, должен?
для тупых поясняю: если я говорю, что надо описать подробнее, значит в первом посте - недостаточно.
как понял меня? приём.
 

bevaine

Новичок
Вообще в исходном значении имеется массив в котором, ключом является порядковый номер значения в выходной строке, а значением этого ключа является само значение в выходной строке.
Так как нельзя чтобы в массиве были одинаковые, то я сделал так:
PHP:
Array
(
    [0] => Array
        (
            [1] => val1
        )

    [1] => Array
        (
            [2] => val2
        )

    [2] => Array
        (
            [2] => val3
        )

)
, где ключ 1 имеет значение - val1, а ключ 2 имеет значения val2 и val3 в итоге в выходной строке будет:
$str = val1.val2;
$str = val1.val3;
, проблема в том что я не знаю сколько будет порядковых номеров и сколько значений для каждого порядкового.
Надеюсь понятно объяснил.
 

Фанат

oncle terrible
Команда форума
проблема в том что я не знаю сколько будет порядковых номеров и сколько значений для каждого порядкового.
открой для себя волшебную функцию foreach
 

bevaine

Новичок
Автор оригинала: Фанат
открой для себя волшебную функцию foreach
для меня эта функция уже давно открыта, меня интерисует, как лучьше разъбить каждый порядковый на массивы или работать с исходным(хотя это сложно, прийдется по несколько раз проходить этот массив), хотелось бы услышать конкретные ответы.
 
Сверху