Скомбинировать данные из одного массива в несколько
Не силен в логических вычислениях, и не очень понимаю работу php генераторов, поэтому прошу помочь с одним вопросом. Есть массив:
$arrayName = array(
'0' => '1X',
'1' => '1',
'2' => '1',
'3' => '1',
'4' => '1',
'5' => '1',
'6' => '1',
'7' => '1',
'8' => '1',
'9' => '1',
'10' => '1',
'11' => '1',
'12' => '1',
'13' => '1',
'14' => '1',
);
Из этого массива получается 2 варианта массивов:
И РАЗ
$arrayName = array(
'0' => '1',
'1' => '1',
'2' => '1',
'3' => '1',
'4' => '1',
'5' => '1',
'6' => '1',
'7' => '1',
'8' => '1',
'9' => '1',
'10' => '1',
'11' => '1',
'12' => '1',
'13' => '1',
'14' => '1',
);
И ДВА
$arrayName = array(
'0' => 'X',
'1' => '1',
'2' => '1',
'3' => '1',
'4' => '1',
'5' => '1',
'6' => '1',
'7' => '1',
'8' => '1',
'9' => '1',
'10' => '1',
'11' => '1',
'12' => '1',
'13' => '1',
'14' => '1',
);
Это было несложно. То есть ключ номер 0 необходимо разбить по 1 символу, ну предположим функцией str_split и сгенерировать все возможные варианты. В данном примере всего 2 варианта а вот в таком массиве
$arrayName = array(
'0' => '1X',
'1' => '1X2',
'2' => '1X2',
'3' => '1',
'4' => '1',
'5' => '1',
'6' => '1',
'7' => '1',
'8' => '1',
'9' => '1',
'10' => '1',
'11' => '1',
'12' => '1',
'13' => '1',
'14' => '1X2',
);
вариантов будет 54 и все их необходимо сгенерировать так, чтобы не было одинаковых массивов.
Количество вариантов в массиве я считаю так
$i = 1;
foreach ($arrayName as $key => $value) {
$count = str_split($value);
$i = $i*count($count);
}
echo $i;
Подскажите может куда капнуть, может все проще чем кажется...
Спасибо!
Ответы (1 шт):
Можно сделать так:
<?php
$arrayName = array(
'0' => '1X',
'1' => '1X2',
'13' => '1',
'14' => 'X2'
);
function array_rec($array)
{
global $arrayout;
foreach ($array as $key => $value)
{
$count = strlen($value);
if ($count > 1)
{
for ($i = 0; $i < $count; $i++)
{
$array2 = $array;
$array2[$key] = $value[$i];
array_rec($array2);
}
return;
}
}
$arrayout[] = $array;
return;
}
$arrayout = array();
array_rec($arrayName);
print_r($arrayout);
Результат (пример я сократил, чтобы не сильно большой вывод был):
Array
(
[0] => Array
(
[0] => 1
[1] => 1
[13] => 1
[14] => X
)
[1] => Array
(
[0] => 1
[1] => 1
[13] => 1
[14] => 2
)
[2] => Array
(
[0] => 1
[1] => X
[13] => 1
[14] => X
)
[3] => Array
(
[0] => 1
[1] => X
[13] => 1
[14] => 2
)
[4] => Array
(
[0] => 1
[1] => 2
[13] => 1
[14] => X
)
[5] => Array
(
[0] => 1
[1] => 2
[13] => 1
[14] => 2
)
[6] => Array
(
[0] => X
[1] => 1
[13] => 1
[14] => X
)
[7] => Array
(
[0] => X
[1] => 1
[13] => 1
[14] => 2
)
[8] => Array
(
[0] => X
[1] => X
[13] => 1
[14] => X
)
[9] => Array
(
[0] => X
[1] => X
[13] => 1
[14] => 2
)
[10] => Array
(
[0] => X
[1] => 2
[13] => 1
[14] => X
)
[11] => Array
(
[0] => X
[1] => 2
[13] => 1
[14] => 2
)
)