Confronto tra matrici

Salve sono nuovo nel forum e volevo porvi un quesito con la speranza che voi possiate aiutarmi .

Sto realizzando un applicazione in php e devo confrontare un numero N di matrici composte da 8 colonne e M righe a gruppi da 2 fino a 8 .

Mi spiego meglio ogni matrice e composta da 8 colonne e un numero variabile di righe "M"   ogni riga è composta da "n" "p"

(Es 1 MATRICE.

N|N|N|P|N|N|N|N|

N|N|P|P|N|N|N|N|

N|P|P|P|N|N|N|N|

P|N|P|P|N|N|N|P|

)

(Es 2 MATRICE.

P|N|N|N|N|N|N|N|

N|N|N|N|N|N|P|P|

N|N|P|P|N|N|N|N|

)

(Es 3 MATRICE.

N|N|N|N|N|N|N|P|

N|N|P|P|N|N|N|N|

)

in confronto tra le tre matrici dovrebbe generare una nuova matrice dove avrò come risultato ;

n+n=n

n+p=p

p+p=X

come posso fare per effettuare questa operazione? naturalmente devo confrontare ;

la prima riga della prima matrice con la prima giga della seconda matrice

la prima riga della prima matrice con la seconda  giga della seconda matrice

la prima riga della prima matrice con la terza giga della seconda matrice

la prima riga della prima matrice con la prima giga della terza matrice

la prima riga della prima matrice con la seconda  giga della terza matrice

la seconda  riga della prima matrice con la prima giga della seconda matrice

la seconda riga della prima matrice con la seconda  giga della seconda matrice

la seconda riga della prima matrice con la terza giga della seconda matrice

la seconda riga della prima matrice con la prima giga della terza matrice

la seconda riga della prima matrice con la seconda  giga della terza matrice

ecc...poi-->

la prima riga della prima matrice con la prima giga della seconda matrice con la prima riga della terza matrice

la prima riga della prima matrice con la prima giga della seconda matrice con la seconda riga della terza matrice

.

.

.

.

.

Proprio tutte le combinazioni (senza ripetizioni )

forse non sono stato molto chiaro ma spero che possiate aiutarmi aspetto vostre risposte grazie

inviato 7 anni fa
ocelot
X 0 X

puoi riportare un piccolo esempio con il risultato?

risposto 7 anni fa
Gianni Tomasicchio
X 0 X

Ciao grazie dell'interesse cmq il risultato di quelle matrice riportate d'esempio nel primo post dovrebbe essere una cosa del genere :

1 matrice 1 riga confrontata con tt le righe della 2 matrice

P|N|N|P|N|N|N|N

NNNPNNPP

NNPXNNNN

1 matrice 1 riga confrontata con tt le righe della 3 matrice

NNNPNNNP

NNPXNNNN

1 matrice 2 riga confrontata con tt le righe della 2 matrice

PNPPNNNN

NNPPNNPP

NNXXNNPP

e cosi via fino a confrontare tt le righe prima una matrice alal volta poi due poi tre ecc. grazie esiste una soluzione?

risposto 7 anni fa
ocelot
modificato 7 anni fa
X 0 X

Ciao ocelot,

dai tuoi esempi ho abbozzato qualcosa

# Es 1 MATRICE.
$A[0] = array(0 => 'N', 1 => 'N', 2 => 'N', 3 => 'P', 4 => 'N', 5 => 'N', 6 => 'N', 7 => 'N');
$A[1] = array(0 => 'N', 1 => 'N', 2 => 'P', 3 => 'P', 4 => 'N', 5 => 'N', 6 => 'N', 7 => 'N');
$A[2] = array(0 => 'N', 1 => 'P', 2 => 'P', 3 => 'P', 4 => 'N', 5 => 'N', 6 => 'N', 7 => 'N');
$A[4] = array(0 => 'P', 1 => 'N', 2 => 'P', 3 => 'P', 4 => 'N', 5 => 'N', 6 => 'N', 7 => 'P');

# Es 2 MATRICE
$B[0] = array(0 => 'P', 1 => 'N', 2 => 'N', 3 => 'N', 4 => 'N', 5 => 'N', 6 => 'N', 7 => 'N');
$B[1] = array(0 => 'N', 1 => 'N', 2 => 'N', 3 => 'N', 4 => 'N', 5 => 'N', 6 => 'P', 7 => 'P');
$B[2] = array(0 => 'N', 1 => 'N', 2 => 'P', 3 => 'P', 4 => 'N', 5 => 'N', 6 => 'N', 7 => 'N');

for ($i = 0; $i < 1; $i++) {

   for ($j = 0; $j < count($B); $j++) {
      $temp = $A[$i];
      $temp1 = $B[$j];

      for ($k = 0; $k < count($temp); $k++) {
         if ($temp[$k] != $temp1[$k])
            $C[$j][$k] = 'P';
         else if ( ($temp[$k] == $temp1[$k]) and ($temp[$k] == 'N') )
            $C[$j][$k] = 'N';
         else if ( ($temp[$k] == $temp1[$k]) and ($temp[$k] == 'P') )
            $C[$j][$k] = 'X';
      } # end for $k

   } # end for $j

   print_r($C);
} # end for $i

Questo codice considera la prima riga della prima matrice ($A) e la confronta con tutte le righe della matrice 2 ($B) creando una terza matrice ($C) che è il tuo risultato.

Da questo puoi aumentare il primo ciclo for (con variabile $i) per fare in modo che ogni riga della prima matrice venga confrontata con le righe della seconda e ti generi "n" matrici $C.

Spero di esserti stato d'aiuto.

Ciao

Zeta

risposto 7 anni fa
zeta80
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda