Tenía que hacer lo mismo y probé las soluciones anteriores publicadas aquí pero no pude hacer que funcionen. Obtuve una muestra de este tipo inteligente http://www.php.net/manual/en/ref.array.php#54979. Sin embargo, su muestra no manejó el concepto de ninguna combinación repetitiva. Así que incluí esa parte.Aquí está mi versión modificada, espero que ayude:
$data = array(
array('apples', 'pears', 'oranges'),
array('steve', 'bob')
);
$res_matrix = $this->array_cartesian_product($data);
foreach ($res_matrix as $res_array)
{
foreach ($res_array as $res)
{
echo $res . " - ";
}
echo "<br/>";
}
function array_cartesian_product($arrays)
{
$result = array();
$arrays = array_values($arrays);
$sizeIn = sizeof($arrays);
$size = $sizeIn > 0 ? 1 : 0;
foreach ($arrays as $array)
$size = $size * sizeof($array);
$res_index = 0;
for ($i = 0; $i < $size; $i++)
{
$is_duplicate = false;
$curr_values = array();
for ($j = 0; $j < $sizeIn; $j++)
{
$curr = current($arrays[$j]);
if (!in_array($curr, $curr_values))
{
array_push($curr_values , $curr);
}
else
{
$is_duplicate = true;
break;
}
}
if (!$is_duplicate)
{
$result[ $res_index ] = $curr_values;
$res_index++;
}
for ($j = ($sizeIn -1); $j >= 0; $j--)
{
$next = next($arrays[ $j ]);
if ($next)
{
break;
}
elseif (isset ($arrays[ $j ]))
{
reset($arrays[ $j ]);
}
}
}
return $result;
}
el resultado sería algo como esto:
manzanas - steve
manzanas - bob
peras - Steve
peras - Bob
naranjas - Steve
naranjas - bob
Si la matriz de datos es algo como esto:
$data = array(
array('Amazing', 'Wonderful'),
array('benefit', 'offer', 'reward'),
array('Amazing', 'Wonderful')
);
entonces será imprimir algo como esto:
increíble - beneficio - maravilloso
increíble - oferta - maravilloso
increíble - recompensa - maravilloso
maravilloso - beneficio - Amazing
maravillosa - oferta - Increíble
Maravillosa - recompensa - Increíble
Habrá Matriz 2, 3 matriz, matriz de N? ¿O solo dos matrices? –
Hola, lo siento por no aclarar, podría haber una matriz 2, una matriz 3 hasta la matriz n. Gracias. – stukerr
Lo que necesita es una combinación cruzada fácil en SQL, pero necesita algo de reflexión en PHP –