Foros del Web » Programando para Internet » PHP »

recorrido de array multidimensional

Estas en el tema de recorrido de array multidimensional en el foro de PHP en Foros del Web. He escrito el siguiente código que tiene que recorrer un array de 5 filas y $asientos columnas. Tiene que buscar el número mayor del array, ...
  #1 (permalink)  
Antiguo 04/05/2011, 02:08
 
Fecha de Ingreso: mayo-2011
Mensajes: 9
Antigüedad: 13 años, 7 meses
Puntos: 0
recorrido de array multidimensional

He escrito el siguiente código que tiene que recorrer un array de 5 filas y $asientos columnas. Tiene que buscar el número mayor del array, cambiar su valor por 0 y buscar el número mayor de los que quedan $asientos veces. El problema es que sólo lo hace una vez y no sé porqué ¿Me podéis ayudar?

Código PHP:
for ($k=0$k<=$asientos$k++){
for (
$i=0$i<=4$i++){
for (
$j=0$j<=$asientos$j++){
if (
$mayor<$votos[$i][$j]){
$mayor=$votos[$i][$j];
$votos[$i][$j]=0;
break;
}
}
}

Gracias.
  #2 (permalink)  
Antiguo 04/05/2011, 02:14
 
Fecha de Ingreso: marzo-2010
Ubicación: Barcelona
Mensajes: 657
Antigüedad: 14 años, 8 meses
Puntos: 26
Respuesta: recorrido de array multidimensional

Eso es por culpa del break: http://php.net/manual/es/control-structures.break.php
__________________
Siempre fallaras el 100% de los tiros que no te atrevas a lanzar.
El 98% de los adolescentes han fumado, si eres del dichoso 2% que no lo ha hecho, copia y pega esto en tu firma.
  #3 (permalink)  
Antiguo 04/05/2011, 02:15
 
Fecha de Ingreso: mayo-2011
Mensajes: 9
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: recorrido de array multidimensional

Cita:
Iniciado por Vallu Ver Mensaje
Eso es por culpa del break: [url]http://php.net/manual/es/control-structures.break.php[/url]
Gracias por la respuesta, pero no. Lo he quitado y sigue igual.

Un saludo.
  #4 (permalink)  
Antiguo 04/05/2011, 03:16
 
Fecha de Ingreso: marzo-2010
Ubicación: Barcelona
Mensajes: 657
Antigüedad: 14 años, 8 meses
Puntos: 26
Respuesta: recorrido de array multidimensional

Código PHP:

for($i=0;$i<5;$i++){
        
$bool=false;
    for(
j=0;$j<$asientos;$j++){
        
$mayor=max($votos[$i]);
        if((
$mayor==$votos[$i][$j])&&($bool==false)){ 
            
$votos[$i][$j]=0;
            
$mayor=max($votos[$i]);
                        
$bool=true;
        }
    }

Esto lo que en teoría hace es buscar el numero mayor dentro de cada porción de array y sustituirlo por 0, luego recoges en la variable $mayor el nuevo numero mas grande de esa porcion del array.
No sé si es lo que pides pero es lo que entendí.
__________________
Siempre fallaras el 100% de los tiros que no te atrevas a lanzar.
El 98% de los adolescentes han fumado, si eres del dichoso 2% que no lo ha hecho, copia y pega esto en tu firma.

Última edición por Vallu; 04/05/2011 a las 04:36
  #5 (permalink)  
Antiguo 04/05/2011, 05:54
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 14 años, 10 meses
Puntos: 58
Respuesta: recorrido de array multidimensional

Hola bjlv00.

Así, de un primer vistazo, veo varios errores en tu código.

El primer bucle, el que quieres que repita $asientos veces, lo está repitiendo $asientos +1 veces porque empiezas desde cero. Debes poner $k<$asientos o empezar desde $k=1.

La instrucción break que tienes dentro del if no sirve para nada. Una instrucción break debe ir dentro de un bucle for.

Con respecto a lo que preguntas no he probado el código todavía. Voy a ver si lo pruebo.

Un saludo.
  #6 (permalink)  
Antiguo 04/05/2011, 06:04
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: recorrido de array multidimensional

Es dificil decirte que podrías hacer, escribe lo que tengas en las variables.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 04/05/2011, 06:09
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 14 años, 10 meses
Puntos: 58
Respuesta: recorrido de array multidimensional

Perdón, lo que he puesto del break es una tontería, se me ha ido la olla.
  #8 (permalink)  
Antiguo 04/05/2011, 06:22
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 14 años, 10 meses
Puntos: 58
Respuesta: recorrido de array multidimensional

¿Podría ser algo así?

Código PHP:
for ($k=0$k<$asientos$k++){ 
  for (
$i=0$i<5$i++){ 
    for (
$j=0$j<$asientos$j++){ 
      if (
$mayor<$votos[$i][$j]){ 
        
$mayor=$votos[$i][$j];
        
$x=$i;
        
$y=$j;        
      }     
    } 
  }
  
$votos[$x][$y]=0;
  
$mayor=0;

Creo que tu problema estaba en la variable $mayor, que no la inicializas al acabar el bucle más externo y después de la primera iteración ya no entra en el if.
  #9 (permalink)  
Antiguo 04/05/2011, 06:24
 
Fecha de Ingreso: mayo-2011
Mensajes: 9
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: recorrido de array multidimensional

Cita:
Iniciado por Vallu Ver Mensaje
Código PHP:

for($i=0;$i<5;$i++){
        
$bool=false;
    for(
j=0;$j<$asientos;$j++){
        
$mayor=max($votos[$i]);
        if((
$mayor==$votos[$i][$j])&&($bool==false)){ 
            
$votos[$i][$j]=0;
            
$mayor=max($votos[$i]);
                        
$bool=true;
        }
    }

Esto lo que en teoría hace es buscar el numero mayor dentro de cada porción de array y sustituirlo por 0, luego recoges en la variable $mayor el nuevo numero mas grande de esa porcion del array.
No sé si es lo que pides pero es lo que entendí.
Muchas gracias por tu interés, pero tampoco funcioma. Sólo cambia por cero el mayor valor de cada columna. Además, no puedo usar la función max(). Llevo horas y horas intentando descifrar el problema y no soy capaz. Me estoy desesperando.

Un saludo y muchas gracias.
  #10 (permalink)  
Antiguo 04/05/2011, 06:31
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 14 años, 10 meses
Puntos: 58
Respuesta: recorrido de array multidimensional

Hola bjlv00,
¿Has probado el código que he puesto? Es que como hemos posteado casi a la vez no sé si lo has visto.

Un saludo.
  #11 (permalink)  
Antiguo 04/05/2011, 06:34
 
Fecha de Ingreso: mayo-2011
Mensajes: 9
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: recorrido de array multidimensional

Cita:
Iniciado por Nexus10 Ver Mensaje
Hola bjlv00.

Así, de un primer vistazo, veo varios errores en tu código.

El primer bucle, el que quieres que repita $asientos veces, lo está repitiendo $asientos +1 veces porque empiezas desde cero. Debes poner $k<$asientos o empezar desde $k=1.

La instrucción break que tienes dentro del if no sirve para nada. Una instrucción break debe ir dentro de un bucle for.

Con respecto a lo que preguntas no he probado el código todavía. Voy a ver si lo pruebo.

Un saludo.
Muchas gracias. Tienes razón en todo lo que dices. Sigo sin solución.

Quizás debería explicar un poco mejor el problema:

La tabla consta de 5 filas y $asientos columnas. Debo buscar el mayor valor de toda la tabla y sustituirla por un 0. Luego, volver a empezar el recorrido por toda la tabla buscando el mayor, ya que el primero de todos ya no existe, por ser 0. Así, sucesivamente, hasta encontrar los $asientos valores mayores.

Un saludo a todos y muchísimas gracias.
  #12 (permalink)  
Antiguo 04/05/2011, 06:37
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 14 años, 10 meses
Puntos: 58
Respuesta: recorrido de array multidimensional

¿Cuando vuelves a repetir buscando el mayor ya no lo tienes que sustituir por cero?. Entonces no está bien el código que te he puesto. Voy a volver a pensarlo.
  #13 (permalink)  
Antiguo 04/05/2011, 06:38
 
Fecha de Ingreso: mayo-2011
Mensajes: 9
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: recorrido de array multidimensional

Cita:
Iniciado por Nexus10 Ver Mensaje
Hola bjlv00,
¿Has probado el código que he puesto? Es que como hemos posteado casi a la vez no sé si lo has visto.

Un saludo.
¡Sí! Nexux10, funciona! No sé cómo agradecertelo. Muchísimas gracias.

Un saludo.
  #14 (permalink)  
Antiguo 04/05/2011, 06:42
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 14 años, 10 meses
Puntos: 58
Respuesta: recorrido de array multidimensional

Ah! Vale, entonces lo había entendido bien, :).

De nada, un saludo.

Etiquetas: multidimensional, recorrido
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:19.