ordenar archivos extraídos dinámicamente

Estoy tratando de cargar archivos dinámicamente desde un directorio y luego ordenarlos por mes. A partir de julio y luego hasta junio.

Esto es lo que tengo hasta ahora --

function monthCompare($a, $b) {
    $a = strtolower($a);
    $b = strtolower($b);
    $months = array(
        'July' => 1,
        'August' => 2,
        'September' => 3,
        'October' => 4,
        'November' => 5,
        'December' => 6,
        'January' => 7,
        'February' => 8,
        'March' => 9,
        'April' => 10,
        'May' => 11,
        'June' =>12,

    );

    if($a == $b)
        return 0;

    if(!isset($months[$a]) || !isset($months[$b]))
        return $a > $b;

    return ($months[$a] > $months[$b]) ? 1 : -1;

}

usort($filearray, "monthCompare");  

Aquí está el código que creo que no funciona.

Muchas Gracias

  1. Estos archivos son minutos y su formato de nombre es "mes-día-año"

  2. Estos archivos pueden ser modificados en cualquier momento por cualquier persona.

  3. Él cree que hay problemas con la forma en que está usando la función usort

preguntado el 12 de junio de 12 a las 18:06

no funciona simplemente los ordena alfabéticamente -

¿Qué tal reducir el problema un poco para nosotros? -

Estas son actas de un comité que deben clasificarse por mes a partir de julio y finalizando en junio. Ahora mismo los está ordenando alfabéticamente por meses. Y estoy tratando de conseguir que lo ordene de la manera que quiero. -

Así que estoy tratando de usar el usort con una función como la que vi en un problema anterior, pero no funciona para mí:

Creo que deberías reestructurar tu código primero. Divídalo en varias funciones para que le resulte más fácil conservar la visión general. -

2 Respuestas

Usa la función hora de archivo. En Unix, esta función le devolverá la fecha de la última modificación del archivo (cuidado, sin embargo, porque en Windows esto le devolverá la hora de creación del archivo). Puede usar esta función para ordenar los archivos en función de cuándo se modificaron, lo que funcionará para sus textos de toma de notas.

Respondido el 12 de junio de 12 a las 18:06

No sé si esto es ignífugo. ¿Qué pasa si algunas ediciones lo hacen en un año o lo que sea? Creo que necesito hacerlo en base a los nombres de los archivos. - jose larson

Bueno, entonces tienes que ser más específico. ¿La gente vuelve y edita las actas? ¿Cómo se almacenan los nombres de sus archivos? ¿Qué parte de tu código crees que no funciona? Todas estas son preguntas que debe responder al formular la pregunta inicial. - florin stingaciu

Es posible que regresen para editar minutos. Quiero asegurarme de que puedan hacerlo y no estropear la clasificación. Mis archivos se almacenan así: 16-agosto-2010.pdf. Creo que es la función monthCompare y luego también el comando usort que no funcionan. jose larson

¿Por qué no tomas el nombre y lo divides en tres campos diferentes? Mes, día y año. Compare cada archivo con todos los demás archivos y asígnele una clasificación. Primero compare el año, luego el mes y luego el día. Lo siento si no estoy leyendo su código y brindándole todas estas otras sugerencias, pero de esto se trata este sitio; dar ayuda para no depurar el código completo de alguien. - florin stingaciu

¿Qué tal convertir el nombre del archivo en marcas de tiempo unix y ordenar por eso? Como esto:

$files = array('january-25-2012.pdf', 'february-2-2012.pdf');
$sorted_array = array();

foreach($files as $key => $file) {
   $name = explode(".", $file);
   $nix_date = strtotime($name[0]); // turn to unix timestamp
   $sorted_array[$nix_date] = $name[0];
}
// sort by keys
ksort($sorted_array);

Resultará en:

 array(2) {
   [1327522320] => string(15) "january-25-2012"
   [1328213520] => string(15) "february-2-2012"
 }

Respondido el 12 de junio de 12 a las 22:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.