• User

    Problema con array_multisort

    Ciao,

    ho un problema con l'istruzione array_multisort :

    Devo sortare l'array prezzo($prezzo) in maniera discendente e di conseguenza utilizzo l'istruzione :

    array_multisort($prezzo,SORT_DESC);

    Cosi' funziona tutto perfettamente.

    se pero' passo l'argomento della funzione in una variabile :

    $sort = "$prezzo,SORT_DESC";

    l'istruzione array_multisort($sort) genera un errore in quanto la funzione di sort prevede come primo parametro un array mentre io gli passo una stringa!!!

    Esiste un modo per far capire al php che quello che gli passo nella variabile $sort contiene tutto il necessario alla funzione array_multisort????


  • Super User

    puoi fare:
    $sort=array("prezzo","SORT_DESC");

    e poi
    array_multisort($$sort[0],$sort[1]);

    ma mi sembra che tu ti complichi la vita inutilmente.

    p.s. occhio al primo sort che ha 2 dollari 🙂


  • User

    Grazie per la risposta, provero' il prima possibile....

    In effetti detta cosi' sembra che mi complichi la vita, ma in realta stavo facendo una funzione generica per il sort di array multi. I campi dell'array da riordinare devono essere passati in input alla funzione oltre a i parametri per l'ordinamento (anche questi in array). Nel caso che ho descritto l'array con i parametritri di ordinamento sara' circa cosi:

    • parametro[0]['daordinare'] = 'prezzo';
    • parametro[0]['tipoord'] = 'SORT_ASC';

    qui dico di ordinare i dati in input per le condizioni sopraelencate.

    Essendo una funzione generale posso mettere tutti i parametri di ordinamento che voglio, per questo mi ritrovo con i valori della funzione array_multisort in una variabile.


  • User

    Ho provato l'istruzione che mi hai segnalato e funziona per il primo campo (ovvero l'array) ma non per il secondo perchè evidentemente vuole proprio la dicitura SORT_DESC.

    In ogni caso, anche con questa situazione devo conoscere a priori il numero di elementi dell'array sort invece io volevo concatenarli tutti in un ciclo for e poi a istruzione completa fare array_multisort.


  • Super User

    se incapsuli tutto in una tua funzione puoi passare solo l'array come parametro ed all'interno della funzione elaborarla in base al numero di elementi presenti nell'array sort.

    se count(sort)==1
    c'è solo l'array => array_multisort($$sort[0]);

    se count(sort)==2
    array e ordinamento => array_multisort($$sort[0],$$sort[1]); //prova con i due dollari

    se count(sort)==3
    array e ordinamento => array_multisort($$sort[0],$$sort[1],$sort[2]); //altri parametri

    (mi raccomando fai uno switch e non un if che è brutto.