- Home
- Categorie
- Coding e Sistemistica
- Coding
- Problema funzione in php 5.3
-
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']=6Come 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
-
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