Visualizzazione dei risultati da 1 a 3 su 3

Hybrid View

  1. #1

    riordinare più array in base a un altro array

    A volte capita anche a me!

    Dunque, ho 3 array così fatti:

    codice:
    {
    "count":["2",">7",">14","21","28","3","4","5","6"],"
    type":["price","percent","percent","percent","percent","price","price","price","price"],
    "percent":["3","30","35","40","45","6","9","12","15"]
    }
    Anche se non risulta perfetto, per ora riordino il "count" in base al valore, quindi con asort, e mi restituisce il nuovo array
    codice:
    {
    "0":"2",
    "5":"3",
    "6":"4",
    "7":"5",
    "8":"6",
    "3":"21",
    "4":"28",
    "2":">14",
    "1":">7"
    }
    Ora vorrei che venissero riordinati anche type e percent, in modo che per esempio alla posizione 8 del nuovo array percent, ci sia il valore che ora sta nella posizione 1, perchè la posizione 1 originale di percent, che vale "30", è ovviamente legata alla posizione 1 originale di count che vale ">7", solo che dopo l'ordinamento di count, ">7" lo troviamo in posizione 8 appunto, quindi il "nuovo" percent" dovrà avere la chiave 8 => 30...ovvero in base al nuovo ordinamento di count

    Ho provato di tutto tra array_map, sort, diff, combine ecc ma non ne esco.

    Certo potrei mettermi lì a costruirmi una funzione apposita ma sono sicuro ci sia un modo molto più elegante e soprattutto "ready to go".

    Ci riesce?
    Ultima modifica di Dascos; 02-03-2023 a 19:41 Motivo: refuso di battitura

  2. #2
    Cicla su tutti i valori in count e ricostruisci un array con i valori di count, type e percent in ogni elemento.

    Poi usa https://php.net/usort per riordinare tale array in base al campo che ti serve.

    Alla fine cicla per il risultato ed estrai il valore che ti serve.

  3. #3
    Quote Originariamente inviata da filippo.toso Visualizza il messaggio
    Cicla su tutti i valori in count e ricostruisci un array con i valori di count, type e percent in ogni elemento.

    Poi usa https://php.net/usort per riordinare tale array in base al campo che ti serve.

    Alla fine cicla per il risultato ed estrai il valore che ti serve.
    Grazie Filippo.
    Se c'è da fare dei cicli o una funzione apposita non è un grosso problema, ci riesco da solo ( :-D :-P ) solo che pensavo esistesse una combinazione di qualche funzione degli array da poter combinare insieme per ottenere lo stesso risultato....

    E in effetti esiste, solo che non l'avevo presa in considerazione, mannaggia li martelletti!!!

    array_multisort($ar1, $ar2, $ar3)

    Con eventualmente il tipo di ordinamento anche per ogni singolo array (SORT_ASC, SORT_STRING ecc ecc).
    In pratica ordina il primo array in base al tipo (default = SORT_REGULAR, cioè comparazione senza sostituzione del tipo di dato) e gli altri in base all'ordinamento del primo, cioè "sposta" i valori nella nuova posizione determinata dal primo ordinamento. A me sembra funzionare, ora verifico mischiando i valori, si sa mai che funziona "per caso" perchè ho valori pseudo ordinati...


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.