Ordinamento decrescente

di il
2 risposte

Ordinamento decrescente

Salve a tutti, mi sono avvicinato al mondo php solamente da pochi giorni e quindi tutto ciò che per voi è banale non lo è per me.
Avendo la necessità di consultare alcune cartelle presenti sul NAS, ho trovato in rete un pacchetto interessante (Cute File Browser) che integra anche un campo di ricerca.
Ho modificato alcuni parametri a mio piacimento ma non riesco a visualizzare i nomi dei file in ordine decrescente. Ho provato ad usare arsort ma non riesco a farlo funzionare, a patto che sia la soluzione giusta.
Penso di non sbagliare nel dire che la funzione va inserita all'interno di questo codice, che procede allo scan delle cartelle e dei file.
Grazie a chi mi potrà aiutare.
<?php

$dir = "Home";

// Run the recursive function 

$response = scan($dir);


// This function scans the files folder recursively, and builds a large array

function scan($dir){
	
	$files = array();

	// Is there actually such a folder/file?

	if(file_exists($dir)){
	
		foreach(scandir($dir) as $f) {
		
			if(!$f || $f[0] == '.') {
				continue; // Ignore hidden files
			}

			if(is_dir($dir . '/' . $f)) {

				// The path is a folder

				$files[] = array(
					"name" => $f,
					"type" => "folder",
					"path" => $dir . '/' . $f,
					"items" => scan($dir . '/' . $f) // Recursively get the contents of the folder
				);
			}
			
			else {

				// It is a file

				$files[] = array(
					"name" => $f,
					"type" => "file",
					"path" => $dir . '/' . $f,
					"size" => filesize($dir . '/' . $f) // Gets the size of this file
				);
			}
		}
	
	}

	return $files;
}

	

// Output the directory listing as JSON

header('Content-type: application/json');

echo json_encode(array(
	"name" => "Home",
	"type" => "folder",
	"path" => $dir,
	"items" => $response
));

2 Risposte

  • Re: Ordinamento decrescente

    Se non ho capito male curiosando in rete bisognerebbe intervenire sulla funzione json_encode ma ovviamente non ho capito come. Ho trovato questo codice ma non so se si può adattare al mio caso.
    function json_sort(string $json, bool $objects=true, bool $arrays=false): string
    {
        // uses a recursive lambda
        $order = null;
        $order = function ($json) use (&$order, $objects, $arrays) { 
            // sort sub-trees
            foreach ($json as $key => $value) {
                if (is_array($value) || is_object($value)) {
                    if (is_array($json)) {
                        $json[$key] = $order($value);
                    } else {
                        $json->$key = $order($value);
                    }
                }
            }
            // sort this array or object
            if ($arrays && is_array($json)) {
                usort($json,function ($a,$b) {
                    return json_encode($a)<=>json_encode($b);
                });
            } elseif ($objects && is_object($json)) {
                $arr = (array) $json;
                ksort($arr);
                $json = (object) $arr;
            }
            return $json;
        };
        return json_encode($order(json_decode($json)));
    }
  • Re: Ordinamento decrescente

    Non puoi pensare di visualizzare allo stesso modo con ordine ascendente (poiché il codice da te mostrato è ricorsivo per l'appunto più di un livello).
    Aggiungi a scandir il secondo parametro con valore 1 per ogni versione di php oppure la costante menzionata sul dock online.
    Tieni presente che l'ordine decrescente sarà con preferenza dello stesso livello di profondità (prima vedrai il padre e poi il figlio), mentre se vuoi qualcosa di diverso la dovresti creare con usort etc.
    Per una maggiore leggibilità puoi semplicemente leggere con il var_dump($response) oscurando temporaneamente il codice per l'output json.
Devi accedere o registrarti per scrivere nel forum
2 risposte