Originariamente inviata da
Grino
Non posso farti un esempio partendo dal tuo codice che è errato e non può mai produrre l'output che indichi anche perchè $el_lissta1 e 2 contengono un array. Però, leggendo le combinazioni "topicX topicY" mi sembra di capire che vuoi produrre tutte le disposizioni senza ripetizione partendo da un array che al suo inteno comprende delle liste di valori o qulacosa del genere.
A scopo esemplificativo ti posto il seguente codice:
Codice PHP:
<?php
$data = Array(
0 => Array(
0 => 45,
1 => 46,
2 => 47),
1 => Array(
0 => 48,
1 => 49,
2 => 50),
2 => Array(
0 => 51,
1 => 52,
2 => 53),
3 => Array(
0 => 54,
1 => 55,
2 => 56)
);
function calcola(&$array, &$testo) {
static $stack = array(), $profondita = 0;
if (isset($array[$profondita])) {
foreach ($array[$profondita] as $value) {
array_push($stack, $value);
$profondita++;
calcola($array, $testo);
$profondita--;
array_pop($stack);
}
} else {
if (!empty($stack)) {
foreach ($stack as $value)
$testo .= $value . '-';
$testo = substr($testo, 0, strlen($testo) - 1) . '<br>';
}
}
}
calcola($data, $testo);
echo $testo;
?>
che produce il seguente output:
codice:
45-48-51-54
45-48-51-55
45-48-51-56
45-48-52-54
45-48-52-55
45-48-52-56
45-48-53-54
45-48-53-55
45-48-53-56
45-49-51-54
45-49-51-55
45-49-51-56
45-49-52-54
45-49-52-55
45-49-52-56
45-49-53-54
45-49-53-55
45-49-53-56
45-50-51-54
45-50-51-55
45-50-51-56
45-50-52-54
45-50-52-55
45-50-52-56
45-50-53-54
45-50-53-55
45-50-53-56
46-48-51-54
46-48-51-55
46-48-51-56
46-48-52-54
46-48-52-55
46-48-52-56
46-48-53-54
46-48-53-55
46-48-53-56
46-49-51-54
46-49-51-55
46-49-51-56
46-49-52-54
46-49-52-55
46-49-52-56
46-49-53-54
46-49-53-55
46-49-53-56
46-50-51-54
46-50-51-55
46-50-51-56
46-50-52-54
46-50-52-55
46-50-52-56
46-50-53-54
46-50-53-55
46-50-53-56
47-48-51-54
47-48-51-55
47-48-51-56
47-48-52-54
47-48-52-55
47-48-52-56
47-48-53-54
47-48-53-55
47-48-53-56
47-49-51-54
47-49-51-55
47-49-51-56
47-49-52-54
47-49-52-55
47-49-52-56
47-49-53-54
47-49-53-55
47-49-53-56
47-50-51-54
47-50-51-55
47-50-51-56
47-50-52-54
47-50-52-55
47-50-52-56
47-50-53-54
47-50-53-55
47-50-53-56
La ricorsività permette di annidare i foreach indipendentemente dal numero di liste, lo stack serve a memorizzare i valori che compongono la tupla e a recuperarli nel momento in cui si raggiunge la profondità massima (ossia è stato estratto un valore da ogni lista) per ripartire con la tupla successiva.
Questo è un metodo ricorsivo. Ovviamente può essere riprodotto anche in modo iterativo.
Edit: Ho visto ora che prendi in considerazione l'elemento topic per produrre la stringa. L'esempio che ti ho postato è una possibile soluzione.