Foros del Web » Programando para Internet » PHP »

Ordenar alfabeticamente con php

Estas en el tema de Ordenar alfabeticamente con php en el foro de PHP en Foros del Web. Hola Chicos del foro!! Tengo un problemita que me esta sacando la cabeza ! ya hace un buen tiempo que quiero ordenar alfabeticamente una lista ...
  #1 (permalink)  
Antiguo 11/11/2010, 07:11
 
Fecha de Ingreso: noviembre-2010
Mensajes: 48
Antigüedad: 14 años, 1 mes
Puntos: 5
Pregunta Ordenar alfabeticamente con php

Hola Chicos del foro!!

Tengo un problemita que me esta sacando la cabeza ! ya hace un buen tiempo que quiero ordenar alfabeticamente una lista que recupero de una BD y lo logre el problemita llega cuando se clickea sobre la link (ya que se trata de un menu), al cargar nuevamente la pagina se desordena, todo, vamos que toma el orden del id en lugar de ordenarlo alfabeticamente!
Chicos!! si alguien me puede ayudar seria super cool ya que mi php no es tan bueno!! besitos!!
  #2 (permalink)  
Antiguo 11/11/2010, 07:26
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 8 meses
Puntos: 101
Respuesta: Ordenar alfabeticamente con php

Si la consulta viene de mysql, te conviene ordenar los datos con sql. Es decir, ORDER BY nombre
  #3 (permalink)  
Antiguo 11/11/2010, 07:26
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: Ordenar alfabeticamente con php

bueno, pues en primera no creo que necesites solucionarlo con PHP.... con especificar el tipo de ordenamiento en tu consulta basta!!
Cita:
SELECT * FROM TABLA ORDER BY columna
si la columna que deseas ordenar es VARCHAR seguro la ordena alfabéticamente... (:
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 11/11/2010, 07:31
 
Fecha de Ingreso: noviembre-2010
Mensajes: 48
Antigüedad: 14 años, 1 mes
Puntos: 5
Respuesta: Ordenar alfabeticamente con php

Gracias chicos por responder tan prontito!

Ese metodo ya lo aplique y de entrada queda todoooo ordenadito, el problema es cuando uno pincha sobre una link, entonses se desordena todo! aqui el codigo del navegador

Código PHP:
Ver original
  1. <?php
  2. if (!defined('WEB_ROOT')) {
  3.     exit;
  4. }
  5. $categories = fetchCategories();
  6. $categories = formatCategories($categories, $catId);
  7.  
  8. ?><ul>
  9. <?php
  10. foreach ($categories as $category) {
  11.     extract($category);
  12.      
  13.     $level = ($cat_parent_id == 0) ? 1 : 2;
  14.     $url   = $_SERVER['PHP_SELF'] . "?c=$cat_id";
  15.    
  16.     if ($level == 2) {
  17.         $cat_name = '&nbsp; &nbsp;' . $cat_name;
  18.        
  19.     }
  20.    
  21.     $listId = '';
  22.     if ($cat_id == $catId) {
  23.         $listId = ' id="current"';
  24.     }
  25. ?>
  26. <li<?php echo $listId; ?>><a href="<?php echo $url; ?>"><?php echo $cat_name; ?></a></li>
  27. <?php
  28. }
  29. ?>
  30. </ul>

La sentencia SELECT esta en otro archivo!

Besitos¨¨
  #5 (permalink)  
Antiguo 12/11/2010, 07:22
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: Ordenar alfabeticamente con php

mira, decías que al pinchar sobre un click se desordena todo....

pero... ¿donde especificas dicho orden en tu código? ¡por que no se ve!

esta claro que php no desordena mágicamente los resultados, es obvio que en algún punto has programado que reaccione así dependiendo de los enlaces... así que si muestras dicho código podríamos ver que hacemos... (:
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 14/11/2010, 05:48
 
Fecha de Ingreso: noviembre-2010
Mensajes: 48
Antigüedad: 14 años, 1 mes
Puntos: 5
Busqueda Respuesta: Ordenar alfabeticamente con php

Hola pateketrueke que alegria que me hayas respondido !

Este es el codigo del menu que carga index.php conjuntamente con el navegador (posteado anteriormente). Este se desordena una vez que ya seleccionastes la categoria deseada, como dije, cargar.... carga bien (de entrada). !

Código PHP:
Ver original
  1. <?php
  2. require_once 'config.php';
  3.  
  4.  
  5. function formatCategories($categories, $parentId)
  6. {
  7.    
  8.     $navCat = array();
  9.    
  10.  
  11.     $ids = array();
  12.     foreach ($categories as $category) {
  13.         if ($category['cat_parent_id'] == $parentId) {
  14.             $navCat[] = $category;
  15.         }
  16.        
  17.        
  18.         $ids[$category['cat_id']] = $category;
  19.     }  
  20.  
  21.     $tempParentId = $parentId;
  22.    
  23.  
  24.     while ($tempParentId != 0) {
  25.         $parent    = array($ids[$tempParentId]);
  26.         $currentId = $parent[0]['cat_id'];
  27.  
  28.        
  29.         $tempParentId = $ids[$tempParentId]['cat_parent_id'];
  30.         foreach ($categories as $category) {
  31.        
  32.             if ($category['cat_parent_id'] == $tempParentId && !in_array($category, $parent)) {
  33.                 $parent[] = $category;
  34.             }
  35.         }
  36.        
  37.        
  38.         array_multisort($parent);
  39.         $n = count($parent);
  40.         $navCat2 = array();
  41.        
  42.         for ($i = 0; $i < $n; $i++) {
  43.             $navCat2[] = $parent[$i];
  44.             if ($parent[$i]['cat_id'] == $currentId) {
  45.                 $navCat2 = array_merge($navCat2, $navCat);             
  46.             }
  47.         }
  48.        
  49.         $navCat = $navCat2;
  50.     }
  51.  
  52.  
  53.     return $navCat;
  54. }
  55.  
  56.  
  57. function getCategoryList()
  58. {
  59.     $sql = "SELECT cat_id, cat_name, cat_image
  60.             FROM tbl_category
  61.             WHERE cat_parent_id = 0 LIKE 'A%'
  62.             ";
  63.     $result = dbQuery($sql);
  64.    
  65.     $cat = array();
  66.     while ($row = dbFetchAssoc($result)) {
  67.         extract($row);
  68.        
  69.         if ($cat_image) {
  70.             $cat_image = WEB_ROOT . 'images/category/' . $cat_image;
  71.         } else {
  72.             $cat_image = WEB_ROOT . 'images/no-image-small.png';
  73.         }
  74.        
  75.         $cat[] = array('url'   => $_SERVER['PHP_SELF'] . '?c=' . $cat_id,
  76.                        'image' => $cat_image,
  77.                        'name'  => $cat_name);
  78.  
  79.     }
  80.    
  81.     return $cat;           
  82. }
  83.  
  84.  
  85. function getChildCategories($categories, $id, $recursive = true)
  86. {
  87.     if ($categories == NULL) {
  88.         $categories = fetchCategories();
  89.     }
  90.    
  91.     $n     = count($categories);
  92.     $child = array();
  93.     sort($child);
  94.     for ($i = 0; $i < $n; $i++) {
  95.         $catId    = $categories[$i]['cat_id'];
  96.         $parentId = $categories[$i]['cat_parent_id'];
  97.         if ($parentId == $id) {
  98.             $child[] = $catId;
  99.             if ($recursive) {
  100.                 $child   = array_merge($child, getChildCategories($categories, $catId));               
  101.             }  
  102.         }
  103.     }
  104.    
  105.     return $child;
  106. }
  107.  
  108. function fetchCategories()
  109. {
  110.     $sql = "SELECT cat_id, cat_parent_id, cat_name, cat_image, cat_description
  111.             FROM tbl_category
  112.             ORDER BY cat_name ASC";  //aqui ordeno el menu de forma ascendente
  113.     $result = dbQuery($sql);
  114.    
  115.     $cat = array();
  116.     while ($row = dbFetchAssoc($result)) {
  117.         $cat[] = $row;
  118.     }
  119.    
  120.     return $cat;
  121. }
  122.  
  123. ?>

Por ahi otro datito es que la pagina se carga nuevamente cada vez que pinchas sobre el menu, o sea que vuelve a llamar a todos los ficheros nuevamente (eso creo ya que ya que luego pinchar en el menu se va el orden "asc").

pateketrueke espero que se entienda, no? Cualquier detalle extra hacemelo saber, si!?

Un y espero que tengas un buen domingo!!

Última edición por marina_mesas; 14/11/2010 a las 05:55
  #7 (permalink)  
Antiguo 18/11/2010, 06:10
 
Fecha de Ingreso: noviembre-2010
Mensajes: 48
Antigüedad: 14 años, 1 mes
Puntos: 5
Pregunta Respuesta: Ordenar alfabeticamente con php

Parese que es muy dificil lo que pido!!

Y para pateketrueke: parece que no leistes bien el ultimo Sript!!

se ordena en la parte que dice:

Código PHP:
Ver original
  1. ORDER BY cat_name ASC";  //aqui ordeno el menu de forma ascendente

O sea que a poner un poco mas de atencion

Última edición por marina_mesas; 18/11/2010 a las 06:16
  #8 (permalink)  
Antiguo 18/11/2010, 07:24
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: Ordenar alfabeticamente con php

Cita:
Iniciado por marina_mesas Ver Mensaje
Parese que es muy dificil lo que pido!!

Y para pateketrueke: parece que no leistes bien el ultimo Sript!!

se ordena en la parte que dice:

Código PHP:
Ver original
  1. ORDER BY cat_name ASC";  //aqui ordeno el menu de forma ascendente

O sea que a poner un poco mas de atencion
mira, aquí el que no presta atención es quién tiene duda....

si lo piensas con calma, ¿cual sería el motivo de que por arte de magia se desordene y no respete el orden que has dado?

no hay razones para que php lo haga así nada mas... seguro hay algún factor que no consideras aún, pero no lo podemos ver!!

el código hace lo que tu le dices, si hace otra cosa completamente distinta entonces tienes serios problemas... ¿seguro que el problema lo tienes ahí?

¿no estarías usando alguna otra función de ordenamiento sobre el resultado de dicha consulta?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 18/11/2010, 09:05
 
Fecha de Ingreso: octubre-2010
Mensajes: 156
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Ordenar alfabeticamente con php

bien si entiendo el problema es cuando se habre otra pagina no?, bien en este caso no sera que al llamar la base de datos en esta pagina colocaste bien el codigo (para ordenar)
  #10 (permalink)  
Antiguo 19/11/2010, 21:27
 
Fecha de Ingreso: noviembre-2010
Mensajes: 48
Antigüedad: 14 años, 1 mes
Puntos: 5
Desacuerdo Respuesta: Ordenar alfabeticamente con php

Cita:
Iniciado por pateketrueke Ver Mensaje
mira, aquí el que no presta atención es quién tiene duda....

si lo piensas con calma, ¿cual sería el motivo de que por arte de magia se desordene y no respete el orden que has dado?

no hay razones para que php lo haga así nada mas... seguro hay algún factor que no consideras aún, pero no lo podemos ver!!

el código hace lo que tu le dices, si hace otra cosa completamente distinta entonces tienes serios problemas... ¿seguro que el problema lo tienes ahí?

¿no estarías usando alguna otra función de ordenamiento sobre el resultado de dicha consulta?
5mentario
  #11 (permalink)  
Antiguo 19/11/2010, 23:49
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: Ordenar alfabeticamente con php

Cita:
Iniciado por marina_mesas Ver Mensaje
5mentario
no se que pretendes pero te voy a decir...

la función fetchCategories() funciona tal cual, devuelve los resultados... que son afectados por el ORDER BY, hasta ahí todo bien...

el problema viene de tu función formatCategories() que es la que desordena todo, pues si no me equivoco ahí esta la razón de todo tu problema!!

¿porque no te has dado cuenta?, lo ignoro... no es mi asunto...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #12 (permalink)  
Antiguo 20/11/2010, 07:18
 
Fecha de Ingreso: noviembre-2010
Mensajes: 48
Antigüedad: 14 años, 1 mes
Puntos: 5
De acuerdo Respuesta: Ordenar alfabeticamente con php

Cita:
Iniciado por pateketrueke Ver Mensaje
no se que pretendes pero te voy a decir...

la función fetchCategories() funciona tal cual, devuelve los resultados... que son afectados por el ORDER BY, hasta ahí todo bien...

el problema viene de tu función formatCategories() que es la que desordena todo, pues si no me equivoco ahí esta la razón de todo tu problema!!

¿porque no te has dado cuenta?, lo ignoro... no es mi asunto...
lo que pretendia era eso que me dijeran solo donde esta el error, nada mas; desde ya muy agradecida sera que te puedo pegruntar como solucionarias este problemita? si no es mucha molestia!?? besos!!

Última edición por marina_mesas; 20/11/2010 a las 07:24
  #13 (permalink)  
Antiguo 07/12/2010, 11:22
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: Ordenar alfabeticamente con php

quizá la función array_multisort() es la que ordena de otro modo los resultados...

me pregunto si serías tan amable de leer el manual:
http://php.net/array_multisort

porque lo mas curioso, es que a mi se me hace que esa función es la que te juega sucio y tu no lo sabías...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #14 (permalink)  
Antiguo 09/12/2010, 10:31
 
Fecha de Ingreso: noviembre-2010
Mensajes: 48
Antigüedad: 14 años, 1 mes
Puntos: 5
Respuesta: Ordenar alfabeticamente con php

Gracias pateketrueke! lo chequeo y te cuento! desde ya te adelanto que lo estuve probando con sort() y nada, leere el manual y te comento! Millones de gracias! Besitos!!
  #15 (permalink)  
Antiguo 05/05/2011, 12:13
 
Fecha de Ingreso: noviembre-2010
Mensajes: 48
Antigüedad: 14 años, 1 mes
Puntos: 5
Respuesta: Ordenar alfabeticamente con php

Pues! Nada no tuve suerte!
  #16 (permalink)  
Antiguo 05/05/2011, 12:49
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 9 meses
Puntos: 336
Respuesta: Ordenar alfabeticamente con php

tal como dijo pateketrueke el año pasado, te falta un order by

$sql = "SELECT cat_id, cat_name, cat_image
FROM tbl_category
WHERE cat_parent_id = 0 LIKE 'A%'
ORDER BY cat_name";

si eso no te sirve siempre puedes ordenar tu arreglo:

<?php
sort($categories);
foreach ($categories as $category) {
extract($category);

$level = ($cat_parent_id == 0) ? 1 : 2;
$url = $_SERVER['PHP_SELF'] . "?c=$cat_id";

if ($level == 2) {
$cat_name = '&nbsp; &nbsp;' . $cat_name;

}

$listId = '';
if ($cat_id == $catId) {
$listId = ' id="current"';
}
?>

P.D.: $cat_parent = Padre de gato XD
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #17 (permalink)  
Antiguo 06/05/2011, 08:21
 
Fecha de Ingreso: noviembre-2010
Mensajes: 48
Antigüedad: 14 años, 1 mes
Puntos: 5
De acuerdo Respuesta: Ordenar alfabeticamente con php

Cita:
Iniciado por stramin Ver Mensaje
tal como dijo pateketrueke el año pasado, te falta un order by

$sql = "SELECT cat_id, cat_name, cat_image
FROM tbl_category
WHERE cat_parent_id = 0 LIKE 'A%'
ORDER BY cat_name";

si eso no te sirve siempre puedes ordenar tu arreglo:

<?php
sort($categories);
foreach ($categories as $category) {
extract($category);

$level = ($cat_parent_id == 0) ? 1 : 2;
$url = $_SERVER['PHP_SELF'] . "?c=$cat_id";

if ($level == 2) {
$cat_name = '&nbsp; &nbsp;' . $cat_name;

}

$listId = '';
if ($cat_id == $catId) {
$listId = ' id="current"';
}
?>

P.D.: $cat_parent = Padre de gato XD

Hola stramin! Muchas gracias por la respuesta!
Aplique las 2 opciones que me distes, pero me funciono la segunda, ahora hay un problemita y es que los ordena por "cat_id" como lo puedo ordenar alfabeticamente?
  #18 (permalink)  
Antiguo 06/05/2011, 13:18
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: Ordenar alfabeticamente con php

Dos cosas:

- Es posible ordenar alfabéticamente directamente desde la consulta, pero no hay que aplicar ningún tipo de ordenación posterior, eso arruinaría la ordenación natural.
- En otro caso si agrupas los resultados en un array, es posible ordenarlo alfabéticamente, usando las funciones de ordenación para arrays.

En ambos casos hay que consultar las referencias disponibles.

Entiende que si haces ambas cosas al mismo tiempo no va salir nada bien, debes tomar un decisión y elegir la correcta.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #19 (permalink)  
Antiguo 06/05/2011, 14:15
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 9 meses
Puntos: 336
Respuesta: Ordenar alfabeticamente con php

Cita:
Iniciado por pateketrueke Ver Mensaje
Dos cosas:

- Es posible ordenar alfabéticamente directamente desde la consulta, pero no hay que aplicar ningún tipo de ordenación posterior, eso arruinaría la ordenación natural.
- En otro caso si agrupas los resultados en un array, es posible ordenarlo alfabéticamente, usando las funciones de ordenación para arrays.

En ambos casos hay que consultar las referencias disponibles.

Entiende que si haces ambas cosas al mismo tiempo no va salir nada bien, debes tomar un decisión y elegir la correcta.
en otras palabras borra el sort($categories); que te sugerí por que en este caso no te va a servir XD

que lastima marina, te has enredado demasiado con un asunto muy simple y la verdad ya no se como sacarte de ahí...
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #20 (permalink)  
Antiguo 06/05/2011, 16:24
 
Fecha de Ingreso: noviembre-2010
Mensajes: 48
Antigüedad: 14 años, 1 mes
Puntos: 5
De acuerdo Respuesta: Ordenar alfabeticamente con php

Cita:
Iniciado por stramin Ver Mensaje
en otras palabras borra el sort($categories); que te sugerí por que en este caso no te va a servir XD

que lastima marina, te has enredado demasiado con un asunto muy simple y la verdad ya no se como sacarte de ahí...
Mmm....!!

Chicos que pena...!! Sera que me pueden sacar de este enredo proponiendo algun otro metodo??
  #21 (permalink)  
Antiguo 06/05/2011, 16:26
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: Ordenar alfabeticamente con php

Cita:
Iniciado por marina_mesas Ver Mensaje
[...] Sera que me pueden sacar de este enredo proponiendo algun otro metodo??
Claro, borrón y cuenta nueva.

Es verdad, cuando un problema supera nuestros métodos actuales lo conveniente sería comenzar de nuevo.

Te propongo que hagas un respaldo de lo que tienes, y comiences una nueva solución desde cero. Así te podríamos ir orientando paso a paso, y tener control sobre lo que haces.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #22 (permalink)  
Antiguo 06/05/2011, 18:58
 
Fecha de Ingreso: noviembre-2010
Mensajes: 48
Antigüedad: 14 años, 1 mes
Puntos: 5
De acuerdo Respuesta: Ordenar alfabeticamente con php

Cita:
Iniciado por pateketrueke Ver Mensaje
Dos cosas:

- Es posible ordenar alfabéticamente directamente desde la consulta, pero no hay que aplicar ningún tipo de ordenación posterior, eso arruinaría la ordenación natural.
- En otro caso si agrupas los resultados en un array, es posible ordenarlo alfabéticamente, usando las funciones de ordenación para arrays.

En ambos casos hay que consultar las referencias disponibles.

Entiende que si haces ambas cosas al mismo tiempo no va salir nada bien, debes tomar un decisión y elegir la correcta.
Hola Pateketrueke!! La verdad que con lo que me costo hacer todo esto, me da pena hacer borron y cuenta nueva!
Pateketrueke; se que vistes un error en mis codigos pero, como que nunca fuistes al punto, te pido porfi que me des una mano y si queres en privado, para que no se K ...... el script! te va?
  #23 (permalink)  
Antiguo 07/05/2011, 07:47
 
Fecha de Ingreso: noviembre-2010
Mensajes: 48
Antigüedad: 14 años, 1 mes
Puntos: 5
Busqueda Respuesta: Ordenar alfabeticamente con php

Hola chicos Como parano tirar todo y comenzar de nuevo, por ahi seria bueno saber donde esta el conflicto.
Este es el script del navegador

Código PHP:
Ver original
  1. <?php
  2. if (!defined('WEB_ROOT')) {
  3.     exit;
  4. }
  5. $categories = fetchCategories();
  6.  
  7. $categories = formatCategories($categories, $catId);
  8. ?><ul>
  9. <?php
  10. sort($categories); // codigo me lo sugirio stramin, que ahora me recomendo que lo saque
  11. foreach ($categories as $category) {
  12.     extract($category);
  13.        
  14.     $level = ($cat_parent_id == 0) ? 1 : 2;
  15.     $url   = $_SERVER['PHP_SELF'] . "?c=$cat_id";
  16.  
  17.     if ($level == 2) {
  18.         $cat_name = '&nbsp; &nbsp;' . $cat_name;
  19.        
  20.     }
  21.    
  22.     $listId = '';
  23.     if ($cat_id == $catId) {
  24.         $listId = ' id="current"';
  25.     }
  26. ?>
  27. <li<?php echo $listId; ?>><a href="<?php echo $url; ?>"><?php echo $cat_name; ?></a></li>
  28. <?php
  29. }
  30. ?>
  31. </ul>

y este es el que muestra las categorias

Código PHP:
Ver original
  1. <?php
  2. require_once 'config.php';
  3.  
  4.  
  5. function formatCategories($categories, $parentId)
  6. {
  7.    
  8.     $navCat = array();
  9.    
  10.  
  11.     $ids = array();
  12.     foreach ($categories as $category) {
  13.         if ($category['cat_parent_id'] == $parentId) {
  14.             $navCat[] = $category;
  15.         }
  16.        
  17.        
  18.         $ids[$category['cat_id']] = $category;
  19.     }  
  20.  
  21.     $tempParentId = $parentId;
  22.    
  23.  
  24.     while ($tempParentId != 0) {
  25.         $parent    = array($ids[$tempParentId]);
  26.         $currentId = $parent[0]['cat_id'];
  27.  
  28.        
  29.         $tempParentId = $ids[$tempParentId]['cat_parent_id'];
  30.         foreach ($categories as $category) {
  31.        
  32.             if ($category['cat_parent_id'] == $tempParentId && !in_array($category, $parent)) {
  33.                 $parent[] = $category;
  34.             }
  35.         }
  36.        
  37.        
  38.         array_multisort($parent);
  39.         $n = count($parent);
  40.         $navCat2 = array();
  41.        
  42.         for ($i = 0; $i < $n; $i++) {
  43.             $navCat2[] = $parent[$i];
  44.             if ($parent[$i]['cat_id'] == $currentId) {
  45.                 $navCat2 = array_merge($navCat2, $navCat);             
  46.             }
  47.         }
  48.        
  49.         $navCat = $navCat2;
  50.     }
  51.  
  52.  
  53.     return $navCat;
  54. }
  55.  
  56.  
  57. function getCategoryList()
  58. {
  59.     $sql = "SELECT cat_id, cat_name, cat_image
  60.             FROM tbl_category
  61.             WHERE cat_parent_id = 0 LIKE 'A%'
  62.             ";
  63.     $result = dbQuery($sql);
  64.    
  65.     $cat = array();
  66.     while ($row = dbFetchAssoc($result)) {
  67.         extract($row);
  68.        
  69.         if ($cat_image) {
  70.             $cat_image = WEB_ROOT . 'images/category/' . $cat_image;
  71.         } else {
  72.             $cat_image = WEB_ROOT . 'images/no-image-small.png';
  73.         }
  74.        
  75.         $cat[] = array('url'   => $_SERVER['PHP_SELF'] . '?c=' . $cat_id,
  76.                        'image' => $cat_image,
  77.                        'name'  => $cat_name);
  78.  
  79.     }
  80.    
  81.     return $cat;           
  82. }
  83.  
  84.  
  85. function getChildCategories($categories, $id, $recursive = true)
  86. {
  87.     if ($categories == NULL) {
  88.         $categories = fetchCategories();
  89.     }
  90.    
  91.     $n     = count($categories);
  92.     $child = array();
  93.     sort($child);
  94.     for ($i = 0; $i < $n; $i++) {
  95.         $catId    = $categories[$i]['cat_id'];
  96.         $parentId = $categories[$i]['cat_parent_id'];
  97.         if ($parentId == $id) {
  98.             $child[] = $catId;
  99.             if ($recursive) {
  100.                 $child   = array_merge($child, getChildCategories($categories, $catId));               
  101.             }  
  102.         }
  103.     }
  104.    
  105.     return $child;
  106. }
  107.  
  108. function fetchCategories()
  109. {
  110.     $sql = "SELECT cat_id, cat_parent_id, cat_name, cat_image, cat_description
  111.             FROM tbl_category
  112.             ORDER BY cat_name ASC";
  113.     $result = dbQuery($sql);
  114.    
  115.     $cat = array();
  116.     while ($row = dbFetchAssoc($result)) {
  117.         $cat[] = $row;
  118.     }
  119.    
  120.     return $cat;
  121. }
  122.  
  123. ?>

Con el codigo de stramin, casi que funciono

Código PHP:
Ver original
  1. <?php
  2. sort($categories); //este codigo
  3. foreach ($categories as $category) {
  4. extract($category);
  5.  
  6. $level = ($cat_parent_id == 0) ? 1 : 2;
  7. $url = $_SERVER['PHP_SELF'] . "?c=$cat_id";
  8.  
  9. if ($level == 2) {
  10. $cat_name = '&nbsp; &nbsp;' . $cat_name;
  11.  
  12. }
  13.  
  14. $listId = '';
  15. if ($cat_id == $catId) {
  16. $listId = ' id="current"';
  17. }
  18. ?>


Pero no los ordenaba por cat_id ! A ver si varios ojos ven mejor que 2 y encontrmos el problemita!?

Un
  #24 (permalink)  
Antiguo 07/05/2011, 13:49
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 4 meses
Puntos: 2237
Respuesta: Ordenar alfabeticamente con php

La solucion puede ser tan sencilla como volver a plantear el funcionamiento o tan complicada como querer "parchar" y hacer que lo que tienes ahora funcione.

De hecho, yo creo que puede servirte esto: Lista complicada. Es para un foro, pero no creo que tengas problema adaptandolo para tus menus.
__________________
- León, Guanajuato
- GV-Foto
  #25 (permalink)  
Antiguo 09/05/2011, 07:28
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 9 meses
Puntos: 336
Respuesta: Ordenar alfabeticamente con php

Creo que lo mejor es hacer lo que dice pateketrueke, creo que la forma en que esta planteado el código no es la mejor, mi sugerencias serían hacerlo así:

Mostrar la lista ordenada tal como se esta haciendo, no es necesario usar funciones solo para un ordenamiento, una consulta que ordene por nombre debería bastar:

$sql = "SELECT cat_id, cat_name, cat_image
FROM tbl_category
WHERE cat_parent_id = 0 LIKE 'A%'
ORDER BY cat_name";

Luego de esto marina quiere que al hacer clic en un link se muestre nuevamente la lista bajo un nuevo criterio, según creo yo, hay 2 buenas formas de hacer esto:

1.- Guardar todos los datos en array en el mismo orden que se leyeron de la base de datos
2.- Volver a generar la lista con la misma consulta que antes de modo de volver a obtener la misma lista ordenada que al principio.

Marina, creo que todo eso que tienes lo puedes hacer en menos lineas, lamentablemente no tengo tanto tiempo libre aquí en la oficina, pero creo que hay algunos mas rápidos que yo aquí que pueden ayudarte.
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #26 (permalink)  
Antiguo 09/05/2011, 10:56
 
Fecha de Ingreso: noviembre-2010
Mensajes: 48
Antigüedad: 14 años, 1 mes
Puntos: 5
De acuerdo Respuesta: Ordenar alfabeticamente con php

Cita:
Iniciado por stramin Ver Mensaje
Creo que lo mejor es hacer lo que dice pateketrueke, creo que la forma en que esta planteado el código no es la mejor, mi sugerencias serían hacerlo así:

Mostrar la lista ordenada tal como se esta haciendo, no es necesario usar funciones solo para un ordenamiento, una consulta que ordene por nombre debería bastar:

$sql = "SELECT cat_id, cat_name, cat_image
FROM tbl_category
WHERE cat_parent_id = 0 LIKE 'A%'
ORDER BY cat_name";

Luego de esto marina quiere que al hacer clic en un link se muestre nuevamente la lista bajo un nuevo criterio, según creo yo, hay 2 buenas formas de hacer esto:

1.- Guardar todos los datos en array en el mismo orden que se leyeron de la base de datos
2.- Volver a generar la lista con la misma consulta que antes de modo de volver a obtener la misma lista ordenada que al principio.

Marina, creo que todo eso que tienes lo puedes hacer en menos lineas, lamentablemente no tengo tanto tiempo libre aquí en la oficina, pero creo que hay algunos mas rápidos que yo aquí que pueden ayudarte.
Ojala y tengas razon stramin un millon de gracias por tu tiempo y si tenes un tiempito libre para mi te pido que no me abandones!!
  #27 (permalink)  
Antiguo 09/05/2011, 11:26
 
Fecha de Ingreso: noviembre-2010
Mensajes: 48
Antigüedad: 14 años, 1 mes
Puntos: 5
De acuerdo Respuesta: Ordenar alfabeticamente con php

Cita:
Iniciado por Triby Ver Mensaje
La solucion puede ser tan sencilla como volver a plantear el funcionamiento o tan complicada como querer "parchar" y hacer que lo que tienes ahora funcione.

De hecho, yo creo que puede servirte esto: [URL="http://www.forosdelweb.com/f18/lista-complicada-756702/#post3181868"]Lista complicada[/URL]. Es para un foro, pero no creo que tengas problema adaptandolo para tus menus.
Fua!!! Triby me dejastes... a ver como lo mastico!!
  #28 (permalink)  
Antiguo 11/05/2011, 10:22
 
Fecha de Ingreso: noviembre-2010
Mensajes: 48
Antigüedad: 14 años, 1 mes
Puntos: 5
De acuerdo Respuesta: Ordenar alfabeticamente con php

Triby perdona , pero es que estoy tan que no lo entiendo por completo!
Quien me da una mano?
  #29 (permalink)  
Antiguo 11/05/2011, 10:43
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 9 meses
Puntos: 336
Respuesta: Ordenar alfabeticamente con php

marina, con todo respeto creo que no estas poniendo mucho de tu parte, animo! lo que estas intentando es algo que todos hemos hecho, solo necesitas esforzarte un poco mas.

MA RI NA
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #30 (permalink)  
Antiguo 11/05/2011, 10:58
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 4 meses
Puntos: 2237
Respuesta: Ordenar alfabeticamente con php

La idea es:

- Leer menus y submenus con una sola consulta SQL
- Guardar esa informacion en una matriz (array) que te permita tener acceso a todo sin tener que modificar el orden o realizar "sub-busquedas".

Si no entendiste lo que se te ha sugerido, cuentanos como crees que podrias lograr los dos objetivos anteriores y, a partir de ahi, comenzara a salir el codigo.
__________________
- León, Guanajuato
- GV-Foto

Etiquetas: alfabeticamente
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 23:25.