Foros del Web » Programando para Internet » PHP »

Problema al ordenar un array

Estas en el tema de Problema al ordenar un array en el foro de PHP en Foros del Web. Buenas a todos !, y gracias de antemano....explico: Soy programador junior, y ahora estoy en un proyecto medianamente grande...que consiste en una aplicación del tipo ...
  #1 (permalink)  
Antiguo 29/06/2015, 08:23
 
Fecha de Ingreso: enero-2011
Mensajes: 17
Antigüedad: 13 años, 3 meses
Puntos: 0
Exclamación Problema al ordenar un array

Buenas a todos !, y gracias de antemano....explico:
Soy programador junior, y ahora estoy en un proyecto medianamente grande...que consiste en una aplicación del tipo red social para profesionales de un sector.
La cuestión es que tengo una página.php que lo que me hace es imprimir un mapa (del tipo hundir la flota) donde me relaciona productos, con comunidades autónomas y planes (éstos planes consiste en poner un punto verde, rojo o amarillo en función de la puntuación dada por los usuarios de la aplicación).
Por otro lado, hay otra página.php que lo que hace es mostrar la ficha técnica de cada producto.

Pues bien, vamos al lío:
La cuestión molesta es que en el mapa de relación de la primera página...lo muestra todo correctamente y utiliza éste código:
Código:
//products
            $list = new Object_Producto_List();
            $orderField = 'nombre';
            $list->setOrderKey($orderField);
            $productos = $list->getObjects();

            $productosOrdered = [];
                foreach($productos as $p => $producto) {
                $productosOrdered[$producto->getId()]= [];
                $productosOrdered[$producto->getId()]['name'] = $producto->getNombre();
                $productosOrdered[$producto->getId()]['img'] = $producto->getImagen();
                $exists = false;
                foreach ($ccaas as $ccaa) {
                    foreach($producto->getPlanes() as $pl => $plan) {
                        if($plan->getRegion()->getId() == $ccaa->getId()) {
                            $productosOrdered[$producto->getId()]['ccaas'][] = $plan->getSemaforo();
                            $productosOrdered[$producto->getId()]['plans'][] = $plan->getDescripcion();
                            $exists = true;
                            break;
                        }
                    }

                    if(!$exists) {
                        $productosOrdered[$producto->getId()]['ccaas'][] = self::DEFAULT_SEMAFORO_VALUE;
                        $productosOrdered[$producto->getId()]['plans'][] = self::DEFAULT_DESC_VALUE;
                    }
                    else {
                        $exists = false;
                    }
                }
            }

            $this->_helper->json(
                            [
                            'status' => 'ok',
                            'products' => $productosOrdered,
                            'region' => $regionName,
                            'message' => $message
                            ]
            );
        } catch (Exception $ex) {
            Logger::err($ex->getMessage());

            $this->_helper->json(
                            [
                            'status' => 'error',
                            'region' => '',
                            'message' => $ex->getMessage()
                            ]
            );
        }
    }
Lo que ocurre es que me hace toda la ordenación por ID de producto, es decir, que los últimos productos insertados en Base de Datos son los que me aparecen al final...
Al hacer sort($productosOrdered) me ordena la lista de productos correctamente, pero el valor de la ID, que es el que usa la otra página.php para mostrar la ficha técnica de cada producto...lo perdemos.... por que me ordena por nombre pero el índice(que a su vez es la ID) me lo comienza a declarar como [0], [1], [2], etc....que está muy bonito, pero no corresponde con las IDS del producto y me pega fallo al hacer click en el producto.
y si hago cualquier tipo de ordenación que mantenga la asociación con la key, como por ejemplo asort($prodcutosOrdered) me sigue manteniendo exactamente la mismas estructura, mantiene exactamente las mismas ID´s (que es lo que queremos) pero no me ordena alfabéticamente la lista de elementos :( .
P.D: Cualquiera podría decirme que haga un order by desde la query pero...digamos que no tengo acceso, que tengo que hacerlo por código y además, si cargo todos los productos de nuevo ordenadamente...solucionaría el problema a corto plazo...pero si en un futuro introdujeran más productos...volverían a tener el mismo problema .

En fin...es un poco CAOS y no sé si lo he explicado del todo bien....si necesitais mas info preguntadme y os la doy, muchisimas gracias !
Un saludo !
  #2 (permalink)  
Antiguo 02/07/2015, 04:44
 
Fecha de Ingreso: enero-2011
Mensajes: 17
Antigüedad: 13 años, 3 meses
Puntos: 0
Respuesta: Problema al ordenar un array

lo subo, ayuda !?

Etiquetas: usuarios
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 17:12.