PHP - Problema al ordenar un array

   
Vista:

Problema al ordenar un array

Publicado por Antonio (1 intervención) el 29/06/2015 16:19:37
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//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 !
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder