Hola Yamsita, voy a tratar de responderte lo mejor que pueda, para empezar, voy a tratar de diseñar, lo que visualmente para nosotros sería un array bidimensional (multidimensional) o matriz, para el ejemplo voy a utilizar uno que sea 5x5, haciendo algunas suposiciones que tratarán de complementar algunas dudas que tengo al respecto, las cuales voy a señalar con rojo:
1. El array multidimensional nosotros lo veríamos de la siguiente manera
Código:
[5][4][6][5][8]
[7][3][8][9][8]
[4][5][ ][3][4]
[1][3][5][7][9]
[2][4][6][8][ ]
Mi primera suposición es que hay
espacios vacíos, pero no en todas las filas, la segunda suposición es que
un número no se repite más de dos veces en la fila y más de 5 veces en la matriz, de otro modo, se te puede estar complicando mucho el programa, por que este que es tan básico solo hará una pasada a toda la matriz, y después de eso, no volverá a revisar.
Por otro lado, al cambiarse un número de fila, pero dejarlo en la misma columna, primero toca
asegurarnos que en esa fila no esté el mismo número y por otro lado tener en cuenta que, al cambiar el número de fila,
el número que se encuentre en esa columna será sobreescrito y la posición antigua del número organizado quedará vacía. Todo esto se hace para lograr un código lo más simple posible.
Como se vería la anterior matríz en php:
No te angusties por las comillas dobles seguidas, ya que estas solo significan que son una cadena de texto vacía. Aunque se supone que es una matriz numérica, en php, los arrays pueden llevar diferentes tipo de datos en sus posiciones.
Ahora, una parte del código, ten en cuenta que a pesar de poderse usar
if, es mejor usar otra estructura: el
foreach; aunque también se puede utilizar el
for, pero es mejor utilizar el foreach, ya que este recorre todo el arreglo, sin necesidad de calcular su tamaño
Te dejo el
enlace de como funciona el foreach.
Básicamente tenemos que ejecutar 2 foreach, el primero para recorrer cada posición del array principal, y el segundo para recorrer cada posición de los arrays internos, además de eso, tenemos que crear una función que nos ayude a buscar un número en una fila determinada. Esta función devuelve
true, si el valor existe, y
false en el caso contrario
Código PHP:
Ver originalfunction buscarRepetido ( $matriz, $fila, $val ) {
$acumulador = 0;
foreach ($matriz[ $fila ] as $num) {
if ($num == $valor) {
$acumulador++;
}
}
if ($acumulador > 1) {
return true;
} else {
return false;
}
}
function buscar ( $matriz, $fila, $valor ) {
foreach ($matriz[ $fila ] as $num) {
if ($num == $valor) {
return true;
}
}
return false;
}
);
$repetido = false;
$con = 0;
foreach ($matriz as $fila) {
foreach ($matriz as $pos=>$val) {
$repetido = buscarRepetido( $matriz, $fila, $val );
if ($repetido) {
for($con = 0; $con < $tam; $con++) {
if ($con == $fila) {
continue;
} else {
$repetido = buscar( $matriz, $con, $val );
if ($repetido == false) {
$matriz[$fila][$pos] = "";
$matriz[$con][$pos] = $val;
break;
}
}
}
}
}
}
Trata de utilizar este código, la verdad lo escribí de memoria, estoy algo apurado por que voy de salida y no se si tenga errores, los cuales si hay, trata de arreglarlos, y te queda de tarea estudiar lo que no entiendas. Es obvio que este código se puede mejorar, pero por ahora espero que funcione bien, si tienes alguna duda, puedes preguntar, pero antes has todo lo posible por que funcione lo que te acabo de pasar
Saludos y éxitos