<pre>
<?php
error_reporting(E_ALL);
$strings = array("[1|2][1|2|3][1|2]", "[1|2][5|7|8]");
foreach ($strings as $string) {
preg_match_all("/\[([0-9\|]+)\]/", $string, $match) or die("Bad string");
$array = array();
foreach ($match[0] as $key => $item) {
$array[] = explode("|", $match[1][$key]);
}
//var_dump($array);
$combinations = 1;
for ($i = 0; $i < sizeof($array); $i++) {
$combinations *= sizeof($array[$i]);
$currentKeys[$i] = 0;
}
$n = sizeof($array)-1;
for ($i = 0; $i < $combinations; $i++) {
$string = null;
for ($k = 0; $k < sizeof($array); $k++) {
$string .= $array[$k][$currentKeys[$k]];
}
echo $string."\n";
$currentKeys[$n]++;
for ($k = sizeof($array)-1; $k >= 0; $k--) {
if ($currentKeys[$k] >= sizeof($array[$k])) {
// echo "~";
$currentKeys[$k] = 0;
if ($k-1 >= 0) {
$currentKeys[$k-1]++;
}
}
}
}
}
?>
111
112
121
122
131
132
211
212
221
222
231
232
15
17
18
25
27
28
// Этот код вычисляет количество максимальных комбинаций
// исходя из размерности, а также инициализирует счетчик,
// в котором хранится информация о текущем значении
// каждого барабана.
$combinations = 1;
for ($i = 0; $i < sizeof($array); $i++) {
$combinations *= sizeof($array[$i]);
$currentKeys[$i] = 0;
}
// ...
// Вычисляет последний разряд (последний барабан, который
// будет крутиться) при прохождении 1-го километра трассы
$n = sizeof($array)-1;
// ...
// Цикл, делаем его столько, сколько есть возможных
// комбинаций
for ($i = 0; $i < $combinations; $i++) {
// ...
// Собираем показания счетчика пробега
for ($k = 0; $k < sizeof($array); $k++) {
// ...
// Наш водитель проехал еще один километр
$currentKeys[$n]++;
// ...
// ...
// следующий блок цикла играет своего рода роль "палочек на
// барабане", которые инкриминируют следующий левее
// барабан и обнуляют значения текущего барабана.
for ($k = sizeof($array)-1; $k >= 0; $k--) {
array(8) {
["product_type"]=> array(1) { [1]=> string(1) "1" }
["price"]=> array(0) { }
["sex"]=> array(2) { ["m"]=> string(1) "m" ["w"]=> string(1) "w" }
["collection"]=> array(2) { [34]=> string(2) "34" [33]=> string(2) "33" }
["assortment"]=> array(9) { [13]=> string(2) "13" [21]=> string(2) "21" [16]=> string(2) "16" [29]=> string(2) "29" [47]=> string(2) "47" [15]=> string(2) "15" [36]=> string(2) "36" [14]=> string(2) "14" [18]=> string(2) "18" }
["brand"]=> array(3) { [37]=> string(2) "37" [36]=> string(2) "36" [12]=> string(2) "12" }
["color"]=> array(1) { [100]=> string(3) "100" }
["size"]=> array(1) { [115]=> string(3) "115" }
}
помочь или переписать?Помогите переписать