Foros del Web » Programando para Internet » PHP »

Foreach dentro de un While

Estas en el tema de Foreach dentro de un While en el foro de PHP en Foros del Web. Hola amigos, Estoy creando una función con una serie de variables que quiero que me compare con los datos de una base de datos, para ...
  #1 (permalink)  
Antiguo 24/08/2011, 05:22
 
Fecha de Ingreso: diciembre-2003
Mensajes: 157
Antigüedad: 20 años, 4 meses
Puntos: 1
Foreach dentro de un While

Hola amigos,

Estoy creando una función con una serie de variables que quiero que me compare con los datos de una base de datos, para mostrar los campos o no, según la variable.

El caso es que lo he conseguido, pero al realizar la comparación con las variables predefinidas en array y foreach, me lo repite el número de veces del array construido sobre las variables (en este caso 8). Supongo que viendo el código lo entenderéis mejor:

Código PHP:
function BaseDatos(
    
$Tabla
    
$Campo0,
    
$Campo1,
    
$Campo2,
    
$Campo3,
    
$Campo4,
    
$Campo5,
    
$Campo6,
    
$Campo7){
    
$db mysql_connect($GLOBALS['dbhost'], $GLOBALS['dbuser'], $GLOBALS['dbpassword']) or die("Connection Error: " mysql_error()); mysql_select_db($GLOBALS['dbname']) or die("Error al conectar a la base de datos.");  
    
//MOSTRAMOS TODAS LAS TABLAS  
    
$Sql ="SHOW TABLES";
    
$result mysql_query$Sql ) or die("No se puede ejecutar la consulta: ".mysql_error());
    
$NoCampos = array('C0'=>$Campo0,'C1'=>$Campo1,'C2'=>$Campo2,'C3'=>$Campo3,'C4'=>$Campo4,'C5'=>$Campo5,'C6'=>$Campo6);
        while(
$Rsmysql_fetch_array($result)) {
            
// PARA CADA TABLA DESCRIBIMOS LOS CAMPOS  
            
$Sql2 ="DESCRIBE ".$Rs[0];  
            
$result2 mysql_query$Sql2 ) or die("No se puede ejecutar la consulta: ".mysql_error());
            echo 
'<table width="100%" class="listado_tablas">';
            if(
$Rs[0] == $Tabla){
                echo 
'<tr><th colspan="4">'.$Rs[0].'</th></tr>';
                
//MOSTRAMOS LA INFORMACION DE LOS CAMPOS
                
while($Rs2 mysql_fetch_array($result2)) {
                foreach(
$NoCampos as $v){
                    if((
$Rs2['Field']!=$v)){
                        echo 
'<td width="55%">'.$Rs2['Field'].'</td>';
                        echo 
'<td width="25%">'.$Rs2['Type'].'</td>';
                    }
                }
                echo 
'</tr>';
                }  
                echo 
'</table>';
            }
        }
    } 
Simplemente, no quiero que me lo repita.
¿Alguna ayuda?
__________________
http://www.idilicstudio.com
  #2 (permalink)  
Antiguo 24/08/2011, 05:43
Avatar de vgonga1986  
Fecha de Ingreso: marzo-2008
Ubicación: País de Pandereta
Mensajes: 1.021
Antigüedad: 16 años, 1 mes
Puntos: 253
Respuesta: Foreach dentro de un While

Claro, es que si el campo que tienes en $Rs2 es diferente de todos los del array, lo estás imprimiendo tantas veces como campos tenga el array. Lo has planteado mal el asunto, ya que estás mirando si es diferente a todos los campos individualmente, tienes que plantearlo si es igual a alguno por separado.

Creo que lo más rápido es con la función in_array que te indica si un valor se encuentra en un array. Tendrías que hacer algo como esto:
Código PHP:
Ver original
  1. if (!in_array($Rs2['Field'], $NoCampos)) {
  2.    // Imprimir
  3. }

Un saludo.
__________________
¿Alguna pregunta, duda, acotación, nota, cuestión, reparo, comentario, demanda, crítica, interpretación, objeción, interrogante, discrepancia, observación, réplica, disquisición, apostilla o exégesis?
  #3 (permalink)  
Antiguo 24/08/2011, 08:09
 
Fecha de Ingreso: diciembre-2003
Mensajes: 157
Antigüedad: 20 años, 4 meses
Puntos: 1
Respuesta: Foreach dentro de un While

Gracias vgonga1986!!
Funciona perfectamente! Más de tres horas dándole vueltas y al final se arreglaba con "in_array"!!! Cosas de ser novato!!
Graciasss de nuevo!!!
__________________
http://www.idilicstudio.com

Etiquetas: foreach, mysql, sql, tabla, variables
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 10:30.