viernes, enero 06, 2012

PHP - Ordenar una arreglo por nombre de campo

http://www.paginasprodigy.com/adan_esime/progs/PHP-ordenarArray.zipTenemos una tabla con las ventas por articulo en cada sucursal


Necesidad:
Se necesita mostrar en pantalla las ventas por tienda ordenanos de mayor a menor
Se debe de mostrar la posición de venta por tienda, es decir enumerarlas, 1 para la mejor venta, N para la venta mas baja.


Solución:
Una solución (no recomendada) es hacer una consulta por tienda solicitando las ventas en orden descendente. Esto se complica cuando en lugar de 3 tiendas tenemos 20.
Se tendrían que hacer 20 consultas.

Según mi experiencia es preferible, generar una consulta única y trabajar con el resultado en el PHP.



CÓDIGO:


//Esta Funcion ordena un array multidimensional por un campo determinado
function topVentas(array $array, $key, $tda="GRAL",$asc = false) {
$tda = ($tda=="GRAL")?"GRAL":"TDA$tda";

$result = array();
$values = array();

foreach ($array as $id => $value) {
$values[$id] = isset($value[$key]) ? $value[$key] : '';
}// end of foreach

if ($asc) {asort($values);}
else {arsort($values);}

//Obtiene Numero de Posicion y Acumula la Venta Total
$i=1;
foreach ($values as $key => $value) {
$result[$key] = $array[$key];
$result[$key]["pos$tda"] = $i;
$i++;
}// end of foreach
return $result;
}//end of topVentas

//Realiza Consulta
$queryVtas="select articulo, vta1, vta2, vta3, totalVtas from tabla_ventas"
$result=mssql_query($queryVtas) or die ("ERROR...");

while ($row =mssql_fetch_array($result)){
      $salida[]=$row;
}

//Ordenamos el arreglo por cada tienda y agrega columna con la posicion 
$salida = topVentas( $salida, "vta1", "1") 
$salida = topVentas( $salida, "vta2", "2") 
$salida = topVentas( $salida, "vta3", "3") 
$salida = topVentas( $salida, "totalVtas", "GRAL") 
echo "
";print_r($salida);echo "
"
?>

No hay comentarios.:

.