Foros del Web » Programando para Internet » PHP »

Horror en arrays. Comparar valores iguales.

Estas en el tema de Horror en arrays. Comparar valores iguales. en el foro de PHP en Foros del Web. Hola, soy nuevo por aqui y llevo 36 horas luchando con algo que no consigo sacar. Imaginemos una supuesta tabla donde yo tengo varias tuplas ...
  #1 (permalink)  
Antiguo 27/03/2012, 03:42
 
Fecha de Ingreso: marzo-2012
Ubicación: Valladolid
Mensajes: 6
Antigüedad: 12 años
Puntos: 0
Horror en arrays. Comparar valores iguales.

Hola, soy nuevo por aqui y llevo 36 horas luchando con algo que no consigo sacar.

Imaginemos una supuesta tabla donde yo tengo varias tuplas con un mismo id y distintas referencias. Algo asi:
id ref unidades
1 23 47
1 32 3
2 54 4

Tengo una consulta sql con un order by, un while, y un foreach que mete todo a un array que se llama datos[$a]. Después mediante un mysql_num_rows, tengo una estructura iterante (for) que recorre dicho array rellenando una tabla con formulario y que da tantas vueltas como el valor de mysql_num_rows. Hasta aqui todo perfecto.

pero claro, me dibuja una tabla para cada id, es decir, me dibuja una tabla con el id 1, la ref 23 y las unidades 47 y luego me dibuja oooootra tabla, con el id 1 la 32 y unidades 3.

Mi pretension es que cuando los ids son iguales, dibuje tantas filas como referencias alla dentro de la misma tabla.

No se como plantear esto, si mediante sql o mediante array (me parece más posible, pero no tengo ni la mas remota idea de como hacerlo)

Gracias por leerme por lo menos me he desahogado xD

Última edición por sir_nano; 27/03/2012 a las 03:49
  #2 (permalink)  
Antiguo 27/03/2012, 06:24
 
Fecha de Ingreso: marzo-2012
Mensajes: 1
Antigüedad: 12 años
Puntos: 0
Respuesta: Horror en arrays. Comparar valores iguales.

Hola alguien me puede ayudar debo guardar multiplo($a,5);

de una funcion ,creada por mi el tema es que necesito que guarde 9 valores que los hace de la misma manera no se como guardarlo ya que debo reutilizarlos en varias operaciones
  #3 (permalink)  
Antiguo 27/03/2012, 07:53
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: Horror en arrays. Comparar valores iguales.

@sir_nano podrías agrupar los resultados de la consulta en arreglos ordenados por su respectiva ID.

Código PHP:
$store[$identificador][] = array($dato1$dato2); 
así si la ID se repite.. los elementos se guardaran dentro del mismo sub arreglo.


saludos.

PD: @bbeirass postea tu pregunta en un tópico aparte.
__________________
More about me...
~ @rhyudek1
~ Github
  #4 (permalink)  
Antiguo 16/04/2012, 01:33
 
Fecha de Ingreso: marzo-2012
Ubicación: Valladolid
Mensajes: 6
Antigüedad: 12 años
Puntos: 0
Respuesta: Horror en arrays. Comparar valores iguales.

si fueras tan amable de desgranarmelo un poco mas, porque esto de los arreglos se me da francamente mal, y no he entendido como lo haces. Yo en este momento tengo un array datos[$a], que es el que voy dando vueltas, tantas como resultados tenga. Como lo tendria que hacer? Gracias.
  #5 (permalink)  
Antiguo 16/04/2012, 05:14
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 5 meses
Puntos: 67
Respuesta: Horror en arrays. Comparar valores iguales.

Lo que dice Hidek es que modifiques el bucle donde creas el array, para hacer:
Un array de arrays, es decir un array, que tenga dentro otro array y en este último los datos de manera que tendrías, cogiendo el código de Hidek.
$store[1][1] = array(23, 47);
$store[1][2] = array(32, 3);
$store[2][1] = array(54, 4);

Ahora bien, es imprescindible meter los datos en un array antes de mostrarlos?, porque no nos pegas esa parte del código, desde la consulta hasta la creacion de la tabla, para ver si hay mejores opciones. Saludos
  #6 (permalink)  
Antiguo 17/04/2012, 01:06
 
Fecha de Ingreso: marzo-2012
Ubicación: Valladolid
Mensajes: 6
Antigüedad: 12 años
Puntos: 0
Respuesta: Horror en arrays. Comparar valores iguales.

Imposible. Hay 8000 ids. os pego asi a grosso modo parte del codigo:

Código:
$resultado= mysql_query("select averias.id_averia, fecha, desc_averia, num_pieza, unidades from averias inner join ave_rep on averias.id_averia=ave_rep.id_averia where fecha between '$v1' and '$v2' order by id_averia",$c);

$a=0;
$comprueba=mysql_num_rows($resultado);
		while ($registro=mysql_fetch_array($resultado,MYSQL_ASSOC))
				{
					foreach($registro as $valor)
					{
						$datos[$a]=$valor;
						$a++;
					}
				}
$a=0;	
for ($i=0;$i<$comprueba;$i++){
	echo "
		<table align=center border=2>
		<FORM name='modificar' method='POST' action='consultaaverias2.php'>
		<tr>
		<td>ID de la averia</td>
		<td><input type='text' name='id_averia' value='$datos[$a]'></td>
		</tr>
	";
	$a++;
	$prueba=$datos[$a];
	$sFechaNormal = implode( '/', array_reverse( explode( '-', $prueba ) ) ) ;
	echo "<br />";		
	echo "
	<tr>
	<td>Fecha Averia</td>
	<td><input type='text' name='fecha' value='$sFechaNormal'></td>
	</tr>
	";	
	$a++;
	echo "<br />";
	echo "
	<tr>
	<td>Descripción de la averia</td>
	<td><input type='text' name='desc_averia' value='$datos[$a]'></td>
	</tr>
	";
	$a++;
	echo "<br />";	
	echo "
	<tr>
	<td>Referencia de la Pieza</td>
	<td><input type='text' name='num_pieza' value='$datos[$a]'></td>
		</tr>
		";
		$a++;
		echo "<br />";
	echo "
	<tr>
	<td>Cantidad</td>
	<td><input type='text' name='unidades' value='$datos[$a]'></td>
	</tr>
	";
	$a++;			
	echo "<br />";
	echo "
	<td align=center><input type='submit' value='Modificar'></td>
	</tr>
	</form>
	</table>
	"; 
	}
	}
  #7 (permalink)  
Antiguo 17/04/2012, 01:58
 
Fecha de Ingreso: marzo-2012
Ubicación: Valladolid
Mensajes: 6
Antigüedad: 12 años
Puntos: 0
Respuesta: Horror en arrays. Comparar valores iguales.

He tenido una idea, pero me teneis que echar una mano:

si yo tengo tres arrays con la id, la fecha y la descripcion, como les puedo leer los tres al mismo tiempo?

Por dios no me digais que anidandolos. Leer los tres al mismo tiempo. Si me decis como os pego el codigo ya con todo solucionado, pues creo que es lo unico que me falta.
  #8 (permalink)  
Antiguo 17/04/2012, 02:05
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 5 meses
Puntos: 67
Respuesta: Horror en arrays. Comparar valores iguales.

Mmmm, yo no lo haría así, si he entendido bien tu código haría algo como esto:
Código PHP:
<?php
$resultado
mysql_query("select averias.id_averia as id, fecha, desc_averia, num_pieza, unidades from averias inner join ave_rep on averias.id_averia=ave_rep.id_averia where fecha between '$v1' and '$v2' order by id_averia",$c);
$comprueba=mysql_num_rows($resultado);
$idAnt '';
while (
$registro=mysql_fetch_assoc($resultado)){
  if(
$registro['id'] != $idAnt){
    echo 
'<table align=center border=2>';
  }
  
?>
    <FORM name="modificar" method="POST" action="consultaaverias2.php">
    <tr>
        <td>ID de la averia</td>
        <td><input type="text" name="id_averia" value="<?php echo $registro['id']; ?>"></td>
    </tr>
    <br />        
    <tr>
       <td>Fecha Averia</td>
       <td><input type="text" name="fecha" value="<?php echo date('d/m/Y',strtotime($registro['fecha'])); ?>"></td>
    </tr>
    <br />
    <tr>
       <td>Descripción de la averia</td>
       <td><input type="text" name="desc_averia" value="<?php echo $registro['desc_averia']; ?>"></td>
    </tr>
    <br />    
    <tr>
       <td>Referencia de la Pieza</td>
       <td><input type="text" name="num_pieza" value="<?php echo $registro['num_pieza']; ?>"></td>
    </tr>
    <br />
    <tr>
       <td>Cantidad</td>
       <td><input type="text" name="unidades" value="<?php echo $registro['unidades']; ?>"></td>
    </tr>    
    <br />
       <td align=center><input type='submit' value='Modificar'></td>
    </tr>
    </form>
    <?php
  
if($registro['id'] != $idAnt){
    echo 
'</table>';
  }
  
$idAnt $registro['id']; 
}
?>
Esta es una forma, no sé si la mejor para tu caso. Espero no haberme equivocado por ahí con los nombres de varibales o con los puntos. He cambiado tambien una cosilla en la consulta.
Mira a ver si funciona y comentame que tal
  #9 (permalink)  
Antiguo 17/04/2012, 03:12
 
Fecha de Ingreso: marzo-2012
Ubicación: Valladolid
Mensajes: 6
Antigüedad: 12 años
Puntos: 0
Respuesta: Horror en arrays. Comparar valores iguales.

No. Eso hace lo mismo que lo mio. Exactamente, tu codigo, hace una tabla (id, desc, fecha, num_pieza, uds), luego vuelve a hacer otra tabla identica donde varia el num_pieza y las uds, y luego ya hace la que deberia ser la segunda tabla (es la tercera) con el segundo id. Vamos, que hace lo mismo que mi codigo: una tabla por referencia (num_pieza) en vez de una tabla por id. Os voy a pegar el codigo que he hecho yo, a ver si alguien es capaz de echarme una mano con los arrays, porque si me dibuja dos tablas, pero la desc y la fecha me las repite por no recorrer todos los arrays al mismo tiempo. No os hagais mucho caso de los comentarios que son de otra pelicula:
Código:
while ($row[]=mysql_fetch_assoc($resultado));

mysql_free_result($resultado);
mysql_close($c);
array_pop($row);
array_multisort($row, SORT_ASC);
$row2=$row;
$row3=$row;
function filtrar_array(&$array, $clave_orden) {
  $array_filtrado = array(); // inicializamos un nuevo array
  // creamos un bucle foreach para recorrer el array original y “acomodar” los datos
  foreach($array as $index=>$array_value) {
    // guardamos temporalmente el nombre de la categoría
    $value = $array_value[$clave_orden];
    // eliminamos la categoria del registro, ya no la necesitaremos
    unset($array_value[$clave_orden]);
    // creamos una clave en nuestro nuevo array, con el nombre de la categoria
    // y como valor le sumamos el array conteniendo producto y precio
    $array_filtrado[$value][] = $array_value;
    /* en cada iteración, si el nombre de la categoría ya figura como clave, será
       sobreescrito y se le agregará como nuevo valor, solo los datos de producto
       y precio. Si la categoria no existe, ahí sí, creará la nueva clave */
  }
  $array = $array_filtrado; // modificamos automáticamente nuestro array global $row
}

//llamamos a la función para filtrar los datos
filtrar_array($row, 'id_averia');
filtrar_array($row2, 'desc_averia');
filtrar_array($row3, 'fecha');

//recorremos el array para imprimirlo con formato HTML
foreach($row as $id_averia=>$num_piezas) {
	echo "
		<table align=center border=2>
		<FORM name='modificar' method='POST' action='consultaaverias2.php'>
		<tr>
		<td>ID de la averia</td>
		<td><input type='text' name='id_averia' value='$id_averia'></td>
		</tr>
	";
foreach($row2 as $desc_averia=>$descripciones){	
	echo "
	<tr>
	<td>Descripción de la averia</td>
	<td><input type='text' name='desc_averia' value='$desc_averia'></td>
	</tr>
	";
foreach($row3 as $fecha=>$fechas){	
$prueba=$fecha;
$sFechaNormal = implode( '/', array_reverse( explode( '-', $prueba ) ) ) ;
	echo "
	<tr>
	<td>Fecha Averia</td>
	<td><input type='text' name='fecha' value='$sFechaNormal'></td>
	</tr>
	";		
  // imprimimos la categoría
  // recorremos los productos
  foreach($num_piezas as $num_pieza) {
    // imprimimos producto y precio
    $num_pieza1=$num_pieza['num_pieza'];
	echo "
	<tr>
	<td>Referencia de la Pieza</td>
	<td><input type='text' name='num_pieza' value='$num_pieza1'></td>
		</tr>
		";
    $unidades1=$num_pieza['unidades'];
	echo "
	<tr>
	<td>Cantidad</td>
	<td><input type='text' name='unidades' value='$unidades1'></td>
	</tr>
	";	
  }
  }    		
  }
	echo "
	<td align=center><input type='submit' value='Modificar'></td>
	</tr>
	</form>
	</table>
	"; 
}
  #10 (permalink)  
Antiguo 17/04/2012, 04:17
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 5 meses
Puntos: 67
Respuesta: Horror en arrays. Comparar valores iguales.

¿Lo has comprobado o no?
Si los ordenas por id estas líneas que puse:
Código PHP:
  if($registro['id'] != $idAnt){
    echo 
'<table align=center border=2>';
  }
  if(
$registro['id'] != $idAnt){
    echo 
'</table>';
  }
  
$idAnt $registro['id']; 
Deberían evitar que te cree una tabla nueva para cada id

Fallo mío, me equivoque al posicionar el final de la tabla :S
Ahora te actualizo el código

Le he puesto un pequeño parche xD, debería funcionar:
Código PHP:
<?php
$resultado
mysql_query("select averias.id_averia as id, fecha, desc_averia, num_pieza, unidades from averias inner join ave_rep on averias.id_averia=ave_rep.id_averia where fecha between '$v1' and '$v2' order by id_averia",$c);
$comprueba=mysql_num_rows($resultado);
$idAnt '';
echo 
'<table border="0">';
while (
$registro=mysql_fetch_assoc($resultado)){
  if(
$registro['id'] != $idAnt){
    echo 
'</table><table align=center border=2>';
  }
  
?>
    <FORM name="modificar" method="POST" action="consultaaverias2.php">
    <tr>
        <td>ID de la averia</td>
        <td><input type="text" name="id_averia" value="<?php echo $registro['id']; ?>"></td>
    </tr>
    <br />        
    <tr>
       <td>Fecha Averia</td>
       <td><input type="text" name="fecha" value="<?php echo date('d/m/Y',strtotime($registro['fecha'])); ?>"></td>
    </tr>
    <br />
    <tr>
       <td>Descripción de la averia</td>
       <td><input type="text" name="desc_averia" value="<?php echo $registro['desc_averia']; ?>"></td>
    </tr>
    <br />    
    <tr>
       <td>Referencia de la Pieza</td>
       <td><input type="text" name="num_pieza" value="<?php echo $registro['num_pieza']; ?>"></td>
    </tr>
    <br />
    <tr>
       <td>Cantidad</td>
       <td><input type="text" name="unidades" value="<?php echo $registro['unidades']; ?>"></td>
    </tr>    
    <br />
       <td align=center><input type='submit' value='Modificar'></td>
    </tr>
    </form>
    <?php
  $idAnt 
$registro['id']; 
}
?> 
</table>

Última edición por zalito12; 17/04/2012 a las 04:39

Etiquetas: arrays, formulario, mysql, sql, tabla
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 12:40.