• User Attivo

    Problema funzione in php 5.3

    Ciao a tutti, ho creato una funzione in php 5.3.0, ma purtroppo ho scoperto ora che il mio hosting monta php 5.2.8 e quest'ultima non funziona.
    Mi viene restituito un fatal error perchè il server non se l'aspetta scritta con questa sintassi.

    [php]
    class prova{
    function ordina_bi($array,$name,$rule){

        usort($array, function ($a,$b) use ($name,$rule){ //questa sintassi funziona solo in php 5.3 o superiore...
            switch ($rule) {
                case "ASC":
                    if($a[$name]==$b[$name]) return 0;
                    if($a[$name]<$b[$name]) return -1; else return +1;            
                break;
                case "DESC":
                    if($a[$name]==$b[$name]) return 0;
                    if($a[$name]<$b[$name]) return +1; else return -1;                    
                break;    
            }
            });
    return $array;
        
        
    }
    

    }//end class[/php]Praticamente si tratta di ordinare un array*($array)* bidimensionale in modo crescente o decrescente($rule) in base a all'indice*($name)* del secondo array, scelto in modo discrezionabile e variabile in base all'array ricevuto. Inoltre non devo perdere gli indici del primo array.

    Es:

    
    $pippo[1]['key2']=2
    $pippo[2]['key2']=6
    $pippo[3]['key2']=5
    
    ```Di seguito vi è l' array bidimensionale ordinato in modo crescente prendendo in considerazione key2:
    

    $pippo[1]['key2']=2
    $pippo[3]['key2']=5
    $pippo[2]['key2']=6

    Come spiegato precedentemente, il codice sopra funziona solo con php 5.3 o superiore e non so proprio come crearlo in altro modo, compatibile con precedenti versioni di php.
    
    Qualche guru potrebbe gentilmente aiutarmi? Grazie anticipatamente di eventuali risposte :)
    Ciao

  • User Attivo

    Dopo 2 giorni bloccato su questo problema, ho risolto così:

    [php]
    class esempio{

    /++++++++++++++++++++++++++++++++++++++++++++
    PER PHP 5.2
    +++++++++++++++++++++++++++++++++++++++++++++
    /
    /+++++++ Variabili per ordinare l'array +++++/
    var $name_ord; //Nome dell'indice
    var $rule_ord; //regola

    /*++++++ Dispone gli elementi dell'attay +++++++*/
    function xsort($a,$b){
                switch ($this->rule_ord) {
                case "ASC":
                    if($a[$this->name_ord]==$b[$this->name_ord]) return 0;
                    if($a[$this->name_ord]<$b[$this->name_ord]) return -1; else return +1;            
                break;
                case "DESC":
                    if($a[$this->name_ord]==$b[$this->name_ord]) return 0;
                    if($a[$this->name_ord]<$b[$this->name_ord]) return +1; else return -1;                    
                break;    
            
            }
    }
       
    /* Ordina array bidimensionale ... riceve l'array, il nome del campo da considerare,
       e l'ordine crescente o decrescente restituendo l'array ordinato. */
    function ordina_bi($array,$name,$rule){
        
        $this->name_ord=$name; //imposta regola e indice che servirà a xsort ...Maledetto php 5.2
        $this->rule_ord=$rule;
        usort($array, array(&$this, "xsort"));
        return $array;
    }
    

    }//end class[/php]

    Purtroppo attualmente non ho possibilità di testare sul server dove verrà eseguito il codice... spero proprio che funzioni.
    Ciao 🙂