Foros del Web » Programando para Internet » PHP »

Enlistar archivos y ordenar segun el valor de una variable

Estas en el tema de Enlistar archivos y ordenar segun el valor de una variable en el foro de PHP en Foros del Web. Hola que tal! Llevo horas buscando una solucion y no la encuentro, el asunto es este... Necesitaba enlistar archivos que están dentro de los subdirectorios ...
  #1 (permalink)  
Antiguo 06/03/2015, 02:13
 
Fecha de Ingreso: octubre-2012
Mensajes: 45
Antigüedad: 12 años
Puntos: 0
Enlistar archivos y ordenar segun el valor de una variable

Hola que tal! Llevo horas buscando una solucion y no la encuentro, el asunto es este...

Necesitaba enlistar archivos que están dentro de los subdirectorios y tengo éste código que funciona perfectamente.


Código:
$ruta = "../Directorio/";
if (is_dir($ruta)) { if ($dh = opendir($ruta)) { while (($carpeta = readdir($dh)) !== false) {  
if (is_dir($ruta . $carpeta) && $carpeta!="." && $carpeta!=".."){

$dir = $carpeta;
$directorio = opendir($dir); //ruta actual
while ($archivo = readdir($directorio)) //obtenemos un archivo y luego otro sucesivamente
{if (is_dir($archivo)){} else {


	include($ruta.$dir.'/'.$archivo);

	echo "$titulo|$enlace|$contenido<br><br>";



}
}

} } closedir($dh);   } }
Funciona muy bien, es lo que necesito... Como verán, aplico un include() para imprimir informacion del archivo como el titulo, enlace y contenido de cada archivo interno...

Hasta ahí todo perfecto... Pero el problema es que necesito ordenarlos de forma personalizada, a partir de una variable.

Al igual que el $Titulo, $Enlace y $Contenido, dentro del archivo tambien lleva una variable "$fecha", esa fecha está en formato strtotime()...

Código:
$fecha = '1435726800';

Hay alguna forma de ordenar los archivos segun la variable $fecha???

Osea, poder ordenar los archivos segun el numero de $fecha, de mayor a menor??


La intencion de ésto es poder ordenar los resultados segun como quiera verlos, por fechas nuevas primero, o fechas viejas, etc... Esa es la intencion de ésto.


Y como último recurso,, En caso de que eso no sea posible, ¿Cómo sería el mismo código, pero los resultados segun la fecha de modificacion del archivo? Pues me aparecen por carpetas, por ejemplo todos los archivos de la carpeta "1" primero, los de la carpeta "2" despues, etc...y no me sirve así. Al menos, por fecha de modificacion, pero como decía, ojala que se pueda ordenar segun el numero de la variable $fecha.


Alguien podría echarme una mano?
  #2 (permalink)  
Antiguo 06/03/2015, 09:22
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Enlistar archivos y ordenar segun el valor de una variable

La única forma de ordenar datos es que se encuentren en listas, es decir, arrays.

De la forma en que lo haces no sirve porque jamás creas una colección con los datos pertinentes.

La idea, después de todo, es tener un array y que cada elemento contenga la fecha, contenido, titulo, enlace, etc.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 06/03/2015, 11:54
 
Fecha de Ingreso: octubre-2012
Mensajes: 45
Antigüedad: 12 años
Puntos: 0
Respuesta: Enlistar archivos y ordenar segun el valor de una variable

Que tal! Gracias por el comentario... Pues bueno, traté de ordenarlo por array, pero me captura todas las lineas con la misma $key osea "array[0]".

El codigo es este:
Código PHP:
Ver original
  1. $orden = "$fecha|$titulo|$enlace|$contenido";
  2.  
  3. $ordenar = array($orden);
  4. sort($ordenar);
  5. foreach ($ordenar as $key => $val) {
  6. echo "datos[" . $key . "] = " . $val . "<br>\n";

El resultado es este:

Cita:
datos[0] = Linea 1...................
datos[0] = Linea 2...................
datos[0] = Linea 3...................
Ya no imprimo los datos, ahora los guardo en la variable $orden para poder meter todo el contenido en una sola linea con toda la info, así fue como te entendi..

Incluso puse primero la fecha para realizar ordenarlo segun ese numero, pero y intente y no le encuentro.

hasta ahora puedo realizar un explode() y capturar el numero. Pero no las puedo ordenar por la misma razón de que el array me arroja todas las lineas en [0]

.
  #4 (permalink)  
Antiguo 06/03/2015, 13:05
 
Fecha de Ingreso: octubre-2012
Mensajes: 45
Antigüedad: 12 años
Puntos: 0
Respuesta: Enlistar archivos y ordenar segun el valor de una variable

Ya lo he conseguido con la funcion list()

Código PHP:
Ver original
  1. $list[$orden] = $orden;
  2. arsort($list); // asort tambien funciona, segun como lo quiera mostrar.
  3.  
  4. foreach($list as $file)
  5.         {
  6.     echo "$file<br>";
  7.         }

De esta manera me captura la variable $orden donde contiene todos los datos en una sola linea. De esta forma la ordena segun el numero si es mayor o menor, me hubiera gustado un poco mas exacta, tal vez con un explode() para capturar los numeros, sin embargo al momento de imprimir la variable sólo imprime los numeros ordenados pero no toda la lista.

Si alguien pudiera decirme como podría hacerlo sería mejor, sino, con esta funcion resuelve gran parte del problema.

Saludos!
  #5 (permalink)  
Antiguo 07/03/2015, 01:28
 
Fecha de Ingreso: marzo-2015
Mensajes: 15
Antigüedad: 9 años, 8 meses
Puntos: 3
Respuesta: Enlistar archivos y ordenar segun el valor de una variable

Se me ocurrio una. necesitas dos array.
haces un explode para capturar el numero de la fecha y lo vas guardando en un array.
despues guardas en otro los datos.
por ultimo usas un array_multisort.

Código PHP:
Ver original
  1. $array_a_ordenar = [];
  2. $array_con_datos = [];
  3.  
  4. //Todo el codigo del file system
  5.  
  6. $datos = explode('|',$orden);
  7. $array_a_ordenar[] = $datos[0]; //agrego el valor fecha al array
  8. $array_con_datos[] = $datos; //agrego todo el array de datos al array
  9.  
  10. //termina el codigo file system;
  11.  
  12. //array_multisort primero ordena un array como base para ordenar los otros, le vamos a pasar como base el array con las fechas y luego el array con todos los datos.
  13.  
  14. array_multisort($array_a_ordenar,$array_con_datos);
  15.  
  16. var_dump($array_con_datos);

Etiquetas: Ninguno
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 14:55.