Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    come funziona usort($array, $function);

    Ciao ragazzi, ho difficoltà a capire il funzionamento di usort($array, $function);
    Dunque, in pratica si ordina un dato array con il criterio definito da una data funzione
    Un esempio comune é:

    <?php
    function my_sort($a,$b)
    {
    if ($a==$b) return 0;
    return ($a<$b)?-1:1;
    }

    $a=array(4,2,8,6);
    usort($a,"my_sort");
    ?>

    Il risultato del''array ordinato é così 2 4 6 8
    Facile! Ma perché??
    Capisco se venissero confrontati due valori tipo 3 e 5, in modo che $a = 3 e $b=5
    allora visto che $a è minore di $b mi viene restituito -1 (return -1)
    ma da qui ad ordinarmi un array di numeri mi sfugge la logica!!
    un grazie a chi mi chiarisce!!

    Melvis

  2. #2
    La funzione che passi a usort() serve per definire il criterio di ordinamento, cioe' dati 2 elementi dell'array deve dire quale va considerato come "prima" e quale come "dopo".

    Per fare questo usort() si aspetta che la funzione restituisca -1 se il primo dei due elementi va considerato minore del secondo, +1 se il primo va considerato maggiore del secondo, 0 se sono equivalenti. Il resto lo fa usort, ciclando sull'array da ordinare e passando alla funzione custom coppie di valori finche' il risultato non e' completamente ordinato.

  3. #3
    Grazie per la pronta risposta...
    visto che mi interessa comprendere anche ai fini pratici, magari confermami se ho capito bene:
    consideriamo l'array dell'esempio array(4,2,8,6);
    i valori che posso confrontare partendo da sinistra verso destra sono:

    4 e 2
    la funzione restituisce 1: il primo elemento va considerato maggiore del secondo, quindi si inverte l'ordine in 2 e 4
    array ora è (2,4,8,6)

    2 e 4
    la funzione restituisce -1: il primo elemento va considerato minore del secondo, quindi l'ordine è corretto
    array rimane (2,4,8,6)

    2 e 8
    la funzione restituisce -1: il primo elemento va considerato minore del secondo, quindi l'ordine è corretto
    array rimane (2,4,8,6)

    2 e 6
    la funzione restituisce -1: il primo elemento va considerato minore del secondo, quindi l'ordine è corretto
    array rimane (2,4,8,6)

    4 e 8
    la funzione restituisce -1: il primo elemento va considerato minore del secondo, quindi l'ordine è corretto
    array rimane (2,4,8,6)

    4 e 6
    la funzione restituisce -1: il primo elemento va considerato minore del secondo, quindi l'ordine è corretto
    array rimane (2,4,8,6)

    8 e 6
    la funzione restituisce 1: il primo elemento va considerato maggiore del secondo, quindi si inverte l'ordine in 6 e 8
    array ora é (2,4,6,8)

    Esaurite le coppie di valori l'array rimane quindi (2,4,6,8)

    Ti sembra corretto il ragionamento?
    (grazie per la pazienza)

  4. #4
    L'idea e' quella, usort() comunque usa l'algoritmo quicksort che puoi vedere descritto qui: https://it.wikipedia.org/wiki/Quicksort

  5. #5
    gentilissimo, grazie e alla prossima!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.